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的包 ...
随机推荐
- 前端模板 artTemplate之辅助方法template.helper
var labelMap = { onlinePayment:{ label:"在线支付", desc:"支持大部分储蓄卡.信用卡及第三方平台支付", name ...
- 部署WEB项目到服务器(三)安装mysql到linux服务器(Ubuntu)详解
突发奇想,想在自己电脑上部署一个web网站. 1,首先是下载一个适合自己已安装服务器版本的mysql数据库. 这里使用网上的链接http://dev.mysql.com/downloads/mysql ...
- Java ee第一周的作业
这学期目标:对Java ee 进行一定程度的学习,希望最后自己能尽可能掌握Java ee的知识 企业及应用的特点:企业级的应用通常比较庞大,而且其中的数据需要保密. Java ee 框架图
- 最全的MonkeyRunner自动化测试从入门到精通(10)
三.MonkeyRunner复杂的功能开始学习 (1)获取APK文件中ID的两种方式 Monkeyrunner的环境已经搭建完成,现在对Monkeyrunner做一个简介. Monkeyrunner工 ...
- C++11 vector使用emplace_back代替push_back
C++11中,针对顺序容器(如vector.deque.list),新标准引入了三个新成员:emplace_front.emplace和emplace_back,这些操作构造而不是拷贝元素.这些操作分 ...
- java8新特性--Stream的基本介绍和使用
什么是Stream? Stream是一个来自数据源的元素队列并可以进行聚合操作. 数据源:流的来源. 可以是集合,数组,I/O channel, 产生器generator 等 聚合操作:类似SQL语句 ...
- jQuery 学习笔记(4)(文本值相关方法、操控CSS方法、位置和尺寸方法)
1.文本值相关方法 .html() == .innerHTML $("div").html("<span> ...</span>") / ...
- nodejs 之=> 函数
基本用法: ES6中允许使用“箭头”(=>)定义函数 var f = v => v; 上面代码相当于定义了一个函数 f : var f = function(v){ return v; } ...
- python相关学习文档收集
bs4中文文档: 用于网页爬虫 https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/ GitLab-CI 从安装到差点放弃 https://segm ...
- deeplabv3+ demo测试图像分割
#!--*-- coding:utf-8 --*-- # Deeplab Demo import os import tarfile from matplotlib import gridspec i ...