npm@5发布有哪些改进
从今天开始,如果您输入“npm install npm@latest -g
”,那么您将被更新为npm版本5。另外,在所有Node.js 8的新安装中都捆绑了npm@5
,它已经替代了Node.js 7
在Node Project的当前版本中。
在过去一年半的时间里,我们一直在努力解决大量的痛点,其中有些是创建npm以来就已经存在的。今天的发布是对npm速度,一致性和用户体验的最大改进。
发布说明中有什么新内容和更改内容的明确列表,但这里有一些亮点:
速度很快
重新编排了包元数据,软件包下载和软件包缓存,这大大加快了工作。一般来说,期望性能提升20-100%; 我们还看到一些安装和版本冲突的运行速度提高了5倍。
由于npm最初的设计,开发人员已经改变了他们如何使用npm。npm生态系统不仅呈指数级增长,而且从2014年起,平均npm软件包中的依赖关系数量增加了250%。现在,更多的开发人员现在可以在本地安装Babel,webpack和Tap等有用工具,而不是全局。这是一个最佳实践,但这意味着“npm install
”可以做更多的工作。
鉴于我们社区的规模,任何速度上升都会为数百万用户带来巨大的节省,更不用说我们的所有组织和npm企业客户。使npm @ 5变快成为一个很显然的目标。
目标一致
默认锁文件
Shrinkwrap
很早就已经是npm的一部分,但npm@5
使lockfiles
成为默认,所以所有的npm安装现在都是可重现的。在安装给定版本的软件包时,每次安装它您获得的文件将是相同的。
我们发现无数常见且耗时的问题可能与不同开发人员环境利用不同软件包版本时发生的“漂移”相关。使用默认锁文件,这不再是问题。你不会浪费时间,试图找出一个错误,只是为了了解它来自运行不同版本的图书馆的人。
SHA-512哈希
npm@5
增加了对Node.js
支持的任何tarball Hash功能的支持,并以SHA-512 hash发布。通过检查所有下载的软件包,您可以防止数据损坏和恶意攻击,并且您可以相信您从npm下载的代码是一致和安全的。
自愈缓存
我们的新缓存很容易损坏,但也更具弹性。多个npm进程不会破坏共享缓存,npm@5
将检查插入和提取的数据,以防止安装损坏的数据。如果缓存项失败完整性检查,npm@5
将自动删除它并重新获取。
更易使用
根据您的反馈,我们通过npm @ 5
中的优化改进了用户体验。其中很大一部分是输出更多的有用的提示信息。最好的例子是,npm不再显示package
上的整个树; 相反,您将看到有关安装内容的摘要报告。由于平均每个package
中的依赖关系较大,因此我们进行了此更改。逐个文件读出结果是超过一定数量就会显得非常笨重。
比较
有一个项目使用 benchmark
比较了 yarn
, pnpm
, npm
的效率, 传送门
下面是比较结果:
Installer | Average over 5 runs |
---|---|
yarn –offline | 5.88 |
pnpm –offline | 6.72 |
pnpm (cached) | 6.86 |
npm 5.x (shrinkpacked, compressed) | 8.35 |
npm 5.x (shrinkpacked) | 8.94 |
npm 5.x (cached) | 11.36 |
npm 4.x (cached) | 13.47 |
yarn | 13.71 |
npm 5.x | 14.93 |
pnpm | 17.57 |
npm 4.x (shrinkpacked, compressed) | 18.73 |
npm 4.x (shrinkpacked) | 18.78 |
npm 4.x | 29.73 |