npm2 与 npm3的包版本管理
npm2采用严格的包依赖模式
npm install name@1.2.* ---- 1.2.0 <= version <= 1.2.9
npm install name@1.* ---- 1.0.0 <= version <= 1.9.9
npm install name@* ---- 0.0.0 <= version
npm install name@^1.2.3 ---- 1.2.3 <= version < 1.9.9
npm install name@~1.2.3 ----- 1.2.3 <= version <1.2.9
我们还可以通过npm info name,查看包的依赖包版本: 例如通过npm info vue,我们可以在输出的信息里面的devDependencies 找到依赖于webpack的版本:webpack: '^3.10.0'
npm3采用的包版本管理模式:
假如我们有一个包A 依赖于包B1.0.0,后来我们有了包C,包C需要依赖包B2.0.0,这个时候npm如何处理呢,npm会把包B2.0.0安装在包C下面,这个时候包B2.0.0嵌套在包C下面,所以我们本质上拥有两个版本的包B,如果我们又有了包D,包D也依赖于包B2.0.0,那么npm依然会在包D下面创建一个包B2.0.0,这个时候就拥有三个包B,假如包D不依赖包B2.0.0,而是依赖于包B1.0.0,那因为包B1.0.0是最先下载的,他属于顶级依赖,所以这个时候什么都不用做,因为包B1.0.0就在那里,这类似于全局环境和局部环境,我们把最先下载的包B1.0.0放入全局环境,如果以后有其他包(例如包C)依赖与包B2.0.0,则放入对应其他包(例如包C)的局部环境,因为局部环境对其他对象是不可见的,所以以后如果还会有其他包(例如包D)依赖于包B2.0.0,我们会另外创建一个包B2.0.0放入对应包D的局部环境,如果包D改为依赖包B1.0.0,因为包B1.0.0在全局环境,可以直接引用,所以就不需要做任何事情
那现在我们设定包D依赖于包B2.0.0,所以现在依赖于包B1.0.0的只有包A,如果我们升级了包A,升级后的包A依赖于包B2.0.0,那么最终会在全局环境删除包B1.0.0,因为包B1.0.0不再有价值了,然后在全局环境换成包B2.0.0,因为新升级的包A需要包B2.0.0,注意这个时候局部环境的包B2.0.0仍然存在,所以很多时候我们需要去重,去掉重复的包引用,例如本例:全局环境和局部环境引用了同样的包B版本,我们通过执行:
npm dedupe
达到删除局部环境里面包B2.0.0的目的,
npm2 与 npm3的包版本管理的更多相关文章
- 前端资源多个产品整站一键打包&包版本管理(二)——如何在bower的配置文件加上注释
问题: 当一个工程里面有好几个项目,每个项目引用同一个包,但是不同的名字,例如在bower中 fancybox 跟 jquery.fancybox 是一样的,我们只需要下载其中的一个版本,而打包工作不 ...
- 前端资源多个产品整站一键打包&包版本管理(一)
来新公司工作的第五个月.整站资源打包管理也提上了日程. 问题: 首先.什么是整站的打包管理呢? 我们公司的几个重要产品都在同一个webapp里面,但是,不同的开发部门独立开发不同的产品,长期以来,我们 ...
- 记一次发布/更新npm包的过程及包版本管理
您可以发布包含package.json文件的任何目录.这里如何首次发布程序包以及如何在以后更新程序包. 如何发布包 制备 了解npm政策 在开始之前,如果您对网站礼仪,命名,许可或其他指南有疑问,最好 ...
- 前端资源多个产品整站一键打包&包版本管理(四)—— js&css文件文件打包并生成哈希后缀,自动写入路径、解决资源缓存问题。
问题: 当我们版本更新的时候,我们都要清理缓存的js跟css,如何使得在网页中不需要手动清理呢? 答案: 生成带有哈希后缀的js跟css文件 1.文件路径 路径中的conf.js 是用于放置全局打包的 ...
- 前端资源多个产品整站一键打包&包版本管理(三)—— gulp分流
问题: 当我们一个工作台里面有好几个项目的时候,我们要为项目的前端资源进行打包,但是,gulpfile只有一个,如果我们把所有的打包都放在同一个文件里面,首先文件会越来越大,而且不便于管理,这时,我们 ...
- 谈谈npm依赖管理
引言 现在的前端开发几乎都离不开nodejs的包管理器npm,比如前端在搭建本地开发服务以及打包编译前端代码等都会用到.在前端开发过程中,经常用到npm install来安装所需的依赖,至于其中的技术 ...
- 前端工程化 - 剖析npm的包管理机制
转自https://juejin.im/post/5df789066fb9a0161f30580c 现如今,前端开发的同学已经离不开 npm 这个包管理工具,其优秀的包版本管理机制承载了整个繁荣发展的 ...
- 使用 Helm 包管理工具简化 Kubernetes 应用部署
当在 Kubernetes 中已经部署很多应用时,后续需要对每个应用的 yaml 文件进行维护操作,这个过程会变的很繁琐,我们可以使用 Helm 来简化这些工作.Helm 是 Kubernetes 的 ...
- 关于npm
转载自AlloyTeam:http://www.alloyteam.com/2016/03/master-npm/ 这是我学npm觉得最好的一篇文章啦-大家一起学起来吧 npm本来是Node.js的包 ...
随机推荐
- zabbix报错排错大全
zabbix报错 https://www.cnblogs.com/losbyday/category/876878.html作者总结的很全棒 1.在启动zabbix-agent 时系统日志输出 PID ...
- bugfree3.0.1-BUG解决方案修改
该篇内容来自文档“masterBugFree2.pdf”,记录在这里. 1.如何将解决方案改为中文 在\Bugfree\Lang\ZH_CN_UTF-8 \_COMMON.php 文件中做如下修改/* ...
- python中接入支付宝当面付
准备 由于正式环境需要商户信息,所以这里使用支付宝提供的沙箱环境.切换到正式环境后只需稍改配置. 1.点击进入蚂蚁金服平台官网. 2.如下图选择:开发者中心->开发服务下的研发服务->沙箱 ...
- JS基本事件(小记)
一. 事件的概念种类及作用(一) 概念:通常鼠标或热键的动作我们称之为事件(event),热键引发的一连串程序的动作,称之为事件驱动(event Driver).而对事件进行处理的程序或函 ...
- JavaScript知识精简
JS单线程,同步,一次执行某一段代码,等到前一个程序执行完毕再执行.,阻塞,安全. 多线程,异步,不用等到前一个程序执行完毕就执行. 数据类型 JavaScript 是 弱类型 语言,但并不是没有 ...
- JaCoCo在Tomcat服务器上监控代码覆盖率的使用方法
简介 Jacoco是一个开源的覆盖率工具.Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序.很多第三方的工具提 ...
- Android -- 带你从源码角度领悟Dagger2入门到放弃(一)
1,以前的博客也写了两篇关于Dagger2,但是感觉自己使用的时候还是云里雾里的,更不谈各位来看博客的同学了,所以今天打算和大家再一次的入坑试试,最后一次了,保证最后一次了. 2,接入项目 在项目的G ...
- Objective-C RunTime 学习笔记 之 AutoReleasPool
1.结构 struct magic_t { /* 魔法 */ static const uint32_t M0 = 0xA1A1A1A1; # define M1 "AU ...
- tensorflow神奇问题
运行tensorflow程序时,遇到了各种奇葩的问题,比如: 1.Import Error: DLL load failed: The specified module could not be fo ...
- Spring Boot IoC 容器初始化过程
1. 加载 ApplicationContextInializer & ApplicationListener 2. 初始化环境 ConfigurableEnvironment & 加 ...