npm2采用严格的包依赖模式

  1. npm install name@1.2.* ---- 1.2.0 <= version <= 1.2.9
  2. npm install name@1.* ---- 1.0.0 <= version <= 1.9.9
  3. npm install name@* ---- 0.0.0 <= version
  1. npm install name@^1.2.3 ---- 1.2.3 <= version < 1.9.9
  1. npm install name@~1.2.3 ----- 1.2.3 <= version <1.2.9
  2. 我们还可以通过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版本,我们通过执行:

  1. npm dedupe
  2.  
  3. 达到删除局部环境里面包B2.0.0的目的,
  1.  
  1.  
  1.  
  1.  
  1.  


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. GIS优秀博客以及网址收藏,持续更新

    1.gislaozhang arcpy,模型构建器,arcpro 地址:https://blog.csdn.net/gislaozhang?t=1      2.雾语 arcpy,模型构建器,arcg ...

  2. PHP调用接口用post方法传送json数据

    1.核心代码: <?php require("helper.php"); header('content-type:text/html;charset=utf-8'); $k ...

  3. JQuery插件之【jqGrid】常用语法整理

    jqGrid常用语法整理,包含数据获取.常用函数.触发事件等 jqGrid表格数据获取相关语法 获取表格所有数据 $("#grid").jqGrid("getRowDat ...

  4. 012-docker-安装-fabric:1.4

    一.准备工作 linux 版本.docker.docker-compose go安装且版本较新 uname -a docker --version docker-compose --version g ...

  5. python基础(3)-pycharm安装&for循环&format字符串&list列表&set集合使用

    安装IDE(PyCharm)&破解 点击下载安装包,安装. 点击下载破解补丁. 进入pycharm安装bin目录,将破解补丁copy到当前目录. 在bin目录下找到pycharm.exe.vm ...

  6. CentOS 7 DR模式LVS搭建

    调度器LB : 192.168.94.11 真实web服务器1 : 192.168.94.22 真实web服务器2 : 192.168.94.33 VIP : 192.168.94.111 脚本如下 ...

  7. 极致21点开发DAY1

    最近在学习UI框架,无奈没有完整的项目学习,四处搜索找了这款游戏源码,在Unity2018上完美运行.于是乎开始学习开发这款游戏.今天主要完成的任务时拼UI.搭建了3个场景, StartScene, ...

  8. 【转】Sqlserver将数据从一个表插入到另一个表

    -- 复制表结构CREATE TABLE empty_table_name LIKE table_name; --根据table_name创建一个空表empty_table_name,empty_ta ...

  9. git help 机器翻译

    该篇发布仅为博主个人保存并参考,内容可能不对 usage: git [--version] [--help] [-C <path>] [-c <name>=<value& ...

  10. RxJava 详解——简洁的异步操作(一)

    随着越来越多的人开始提及 RxJava ,鉴于 RxJava 目前这种既火爆又神秘的现状,写下这篇文章来对 RxJava 做一个相对详细的.针对 Android 开发者的介绍. 这篇文章的目的有两个: ...