npm
在应用 npm
安装包的时候,给人的第一感觉就是慢,而且还会在命令行打印出一堆的货色,而且常常会呈现“在我的电脑上能够 ……”这个问题,着实是有点好受。
但也不得不说 npm
是 node
如此胜利的次要起因之一。
npm 的毛病如下:
1、因为版本号的影响, 所以会造成版本不对立的状况
npm 是围绕着语义版本控制的思维而设计的
给定一个版本号:主版本号. 次版本号. 补丁版本号
主版本号:当 API 产生扭转,并与之前的版本不兼容的时候
次版本号:当减少了性能,然而向后兼容的时候
补丁版本号:当做了向后兼容的缺点修复的时候
package.json 某依赖的版本号如下:
“5.0.3”, // 装置指定的 5.0.3 版本
“~5.0.3”, // 装置 5.0.X 中最新的版本
“^5.0.3” // 装置 5.X.X 中最新的版本
因而不同的开发人员应用雷同的 package.json 文件,在他们本人的机器上可能会装置同一个库的不同版本,这样就会存在潜在的难以调试的谬误和“在我的电脑上…”的情景。
2、因为 npm 库存在嵌套依赖的关系, 会减少无奈匹配相应版本的概率
每一个包,会有嵌套其余的依赖包,如果两个包中存在同一个依赖包,但两者须要的依赖包的版本号不同,就会呈现包的版本匹配问题。
3、npm 的输入信息比拟简短
装置的时候,包会在同一时间下载和装置,中途某个时候,一个包出了谬误,然而 npm
会持续下载和安装包。因为 npm
会把所有的日志输入到终端,无关谬误包的错误信息就会在一大堆 npm
打印的正告中失落掉,所以你很难找到真正出错的包和起因。
4、下载速度慢
npm 2 会装置每一个包所依赖的所有依赖项,有一个我的项目,A 依赖 B,B 依赖 C,依赖树如下:
node_modules
- package-A
-- node_modules
--- package-B
----- node_modules
------ package-C
-------- some-really-really-really-long-file-name-in-package-c.js
这个构造可能会很长。这对于基于 Unix 的操作系统来说只不过是一个小懊恼,但对于 Windows 来说却是个破坏性的货色,因为有很多程序无奈解决超过 260 个字符的文件路径名。
npm 3 采纳了扁平依赖关系树来解决这个问题,所以咱们的 3 个我的项目构造当初看起来如下所示:
node_modules
- package-A
- package-B
- package-C
-- some-file-name-in-package-c.js
这样,一个原来很长的文件路径名就从 ./node_modules/package-A/node_modules/package-B/node-modules/some-file-name-in-package-c.js
变成了/node_modules/some-file-name-in-package-c.js
。
这种办法的毛病是,npm 必须首先遍历所有的我的项目依赖关系,而后再决定如何生成扁平的 node_modules 目录构造。npm 必须为所有应用到的模块构建一个残缺的依赖关系树,这是一个耗时的操作,是 npm 装置速度慢的一个很重要的起因。
同时,因为 npm 是从国外服务器下载,因为网络起因,速度会很慢。
cnpm
绝对于 npm
而言,cnpm
的下载速度要快很多。cnpm
更快,是因为淘宝将国外服务器的内容,先申请到了本人国内的服务器上,这样咱们应用 cnpm 的时候下载的依赖就是从国内服务器上下载过去的,速度绝对快很多。
官网上说:“这是一个残缺 npmjs.org 镜像,你能够用此代替官网版本,同步频率目前为 10 分钟 一次以保障尽量与官网服务同步。”
yarn
yarn 的长处:
1、yarn 离线模式
如果你以前装置过某个包,再次装置时能够在没有任何互联网连贯的状况下进行。
2、装置版本对立
yarn 有锁定文件(lock file) 记录了确切被装置模块的版本号,每次新增文件时,yarn 会创立(或更新)yarn.lock 这个文件,保障每次装置依赖时都是一样的模块版本。
3、扁平模式
将依赖包的不同版本归结为单个版本,以防止创立多个正本。
npm 和 yarn 的命令比照
npm | yarn |
---|---|
npm install | yarn 或者 yarn install |
npm install react –save | yarn add react |
npm uninstall react –save | yarn remove react |
npm install react –save-dev | yarn add react –dev |
npm update –save | yarn update |
参考资料:
npm 和 yarn 的区别和比照
npm,cnpm 和 yarn 的区别
yarn 中文文档