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的包版本管理的更多相关文章

  1. 前端资源多个产品整站一键打包&包版本管理(二)——如何在bower的配置文件加上注释

    问题: 当一个工程里面有好几个项目,每个项目引用同一个包,但是不同的名字,例如在bower中 fancybox 跟 jquery.fancybox 是一样的,我们只需要下载其中的一个版本,而打包工作不 ...

  2. 前端资源多个产品整站一键打包&包版本管理(一)

    来新公司工作的第五个月.整站资源打包管理也提上了日程. 问题: 首先.什么是整站的打包管理呢? 我们公司的几个重要产品都在同一个webapp里面,但是,不同的开发部门独立开发不同的产品,长期以来,我们 ...

  3. 记一次发布/更新npm包的过程及包版本管理

    您可以发布包含package.json文件的任何目录.这里如何首次发布程序包以及如何在以后更新程序包. 如何发布包 制备 了解npm政策 在开始之前,如果您对网站礼仪,命名,许可或其他指南有疑问,最好 ...

  4. 前端资源多个产品整站一键打包&包版本管理(四)—— js&css文件文件打包并生成哈希后缀,自动写入路径、解决资源缓存问题。

    问题: 当我们版本更新的时候,我们都要清理缓存的js跟css,如何使得在网页中不需要手动清理呢? 答案: 生成带有哈希后缀的js跟css文件 1.文件路径 路径中的conf.js 是用于放置全局打包的 ...

  5. 前端资源多个产品整站一键打包&包版本管理(三)—— gulp分流

    问题: 当我们一个工作台里面有好几个项目的时候,我们要为项目的前端资源进行打包,但是,gulpfile只有一个,如果我们把所有的打包都放在同一个文件里面,首先文件会越来越大,而且不便于管理,这时,我们 ...

  6. 谈谈npm依赖管理

    引言 现在的前端开发几乎都离不开nodejs的包管理器npm,比如前端在搭建本地开发服务以及打包编译前端代码等都会用到.在前端开发过程中,经常用到npm install来安装所需的依赖,至于其中的技术 ...

  7. 前端工程化 - 剖析npm的包管理机制

    转自https://juejin.im/post/5df789066fb9a0161f30580c 现如今,前端开发的同学已经离不开 npm 这个包管理工具,其优秀的包版本管理机制承载了整个繁荣发展的 ...

  8. 使用 Helm 包管理工具简化 Kubernetes 应用部署

    当在 Kubernetes 中已经部署很多应用时,后续需要对每个应用的 yaml 文件进行维护操作,这个过程会变的很繁琐,我们可以使用 Helm 来简化这些工作.Helm 是 Kubernetes 的 ...

  9. 关于npm

    转载自AlloyTeam:http://www.alloyteam.com/2016/03/master-npm/ 这是我学npm觉得最好的一篇文章啦-大家一起学起来吧 npm本来是Node.js的包 ...

随机推荐

  1. vivi.c框架

    内核文档: V4L2-framework.txt UVC:usb video controll UVC驱动框架: system call: open read write -------------- ...

  2. ShoppingCart类图

    1,组合关系,实心的棱形画在整体上面,发现很多人把它画错了 2,1..*或*代表的意义说明: 完整格式为:最小数量..最大数量 约束:前者必须小于后者,如1..*表示1个或多个,不会包含1..0这种情 ...

  3. ignore_user_abort(true); set_time_limit(0);程序在本地测试可以一直运行,上传服务器只能运行10-15分钟

    当PHP运行在安全模式下时此函数无效.除了关闭安全模式或者在php.ini程序中修改最大运行时间没有其他办法让此函数运行. php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中 ...

  4. PHP----------php-fpm进程数的一些相关配置

    1.其中pm.max_children如何配置:pm.max_children 数量的多少根据机器内存确定,基本上一个进程需要30M的内存,假设起100个进程,那么就是3000M,3G内存. 2.pm ...

  5. hive sql执行的job在map时报java.lang.OutOfMemoryError的错误

    较为详细且重要的一段报错信息是org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.OutOfMemoryError: ...

  6. CentOS 7 通过SQLmap进行SQL注入

    安装SQLmap: IP:192.168.94.11 渗透测试演练系统DVWA: IP:192.168.94.111 通过SQLmap检测SQL注入漏洞 : 1.安装SQLmap漏洞查看工具 2.安装 ...

  7. c# 结构的使用

    类的定义的是引用类型,重点在堆上创建,有的时候类只包含极少的数据,因为管理堆而造成的开销是很大的.这时候更好的做法就是将类型定义成结构.结构是值类型,在栈上存储,能有效的减小内存管理的开销.c#基元类 ...

  8. KVM 通过virsh console连入虚拟机

    新安装一台虚拟机后,是无法通过virsh console 命令连入虚拟机中的,这时我们需要开启虚拟机的console功能. 一.添加ttyS0的许可,允许root登陆 [root@localhost ...

  9. Android项目第一天,下载安装Android Studio和“我的第一个安卓项目”

    一.AS的下载我是在AS官方网站进行下载的最新版本,如图所示 二.AS的安装过程 点击你下载的安装包安装即可,傻瓜式一站到底. 到这一步时选择第二个按钮, 随后出现如下界面 这个窗口是提示我们设置代理 ...

  10. npm报错处理

    在npm install 命令下载的时候经常会出现下面的报错: 解决办法: npm cache clean --force npm install