“npm install”在 npm 7 中变得确定了吗?

Rus*_*der 5 npm npm-install npm-ci

这里https://github.blog/2021-02-02-npm-7-is-now-generally-available/ 说:

锁文件 v2 解锁了进行确定性和可重复构建以生成包树的能力。

但我想知道这是 npm 7 现在的默认行为吗?也就是说,如果有一个package-lock.json将使用不精确的版本(例如from)npm install更新最顶层的软件包,或者它将始终以与以前相同的方式工作?^1.0.0package.jsonyarn

如果npm install现在是确定性的,如果我说这npm ci基本上相当于

rm -rf node_modules && npm install
Run Code Online (Sandbox Code Playgroud)

一些额外的检查?

wal*_*ali 5

简短回答:

是的!

较长的答案:

如果您有 apackage-lock.jsonyarn.lock文件,则npmyarn分别会产生确定性结果。

这里需要注意的一件事是,使用yarn.lock 文件的yarn 仅针对特定版本的yarn 生成确定性构建。

鉴于yarn.lock 和Yarn 版本的单一组合,Yarn 安装保证是确定性的。不同版本的 Yarn 可能会导致磁盘上的树布局不同。

而 npm 的算法允许它即使对于不同版本的 npm 也能产生确定性结果,因为 npm 树构建契约完全由 package-lock.json 文件指定。

您可以在此博客中找到两者的更详细解释