什么时候不能在 Node.js 中使用 Lock Files(2)

那个 tarball 将被上传到 npm注册表。运行此命令时你可能会注意到加入你已经有了一个 package-lock.json,它实际上没有被捆绑。这是因为 package-lock.json 将始终被忽略。

这意味着如果另一个开发人员安装了你发布的软件包,他们永远不会下载你的 package-lock.json,因此在安装过程中将会完全忽略它。

这可能会导致“在我的机器上能够工作”的意外,因为你的 CI 和开发环境可能会选择不同的依赖项版本。那么我们可以做些什么呢?

禁用 lock file 并收缩包装

首先,应该停止跟踪我们的 lock file。如果你用的是git,请将以下内容添加到项目中的 .gitignore 文件中:

yarn.lock package-lock.json

Yarn 的文档说即使你创建了库,也应该签入 yarn.lock,但是如果你想确保自己能够保证与用户相同的体验,我建议将其添加到 .gitignore。

你可以通过在项目里的 .npmrc 文件中添加以下内容来关闭 package-lock.json 文件的生成:

package-lock=false

对于 yarn,你可以通过添加 yarn install --no-lockfile 标志保证不生成 lock file。

摆脱了 package-lock.json 并不意味着无法固定我们所拥有的依赖关系和子依赖关系。我们可以用另一个名为 npm-shrinkwrap.json 的文件。

它与 package-lock.json 基本相同,并由 npm shrinkwrap 生成并实际的打包并发布到 npm 注册表中。
因此,通过将 npm shrinkwrap 添加到 npm 脚本作为 prepack 脚本甚至是 git commit hook,可以确保在你的开发环境中,与你的用户和 CI 中使用相同版本的依赖项。

**一个重要的提示:**通过使用 shrinkwrap 文件,你可以确定精确的版本,但它也会阻止人们获得自动安装的关键补丁程序。 npm 强烈反对库的 shrinkwrap 的用例。

了解更多信息

不幸的是,虽然 npm docs 中有很多相关内容,但有时很难找到你想要的东西。如果你想更好地了解安装或打包的内容,那么你一个常见标志就是 --dry-run。运行该命令而不会影响你的系统。

例如 npm install --dry-run 并不会将依赖项安装到你的文件系统,或者 npm publish --dry-run 实际上也不会发布该包。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/27b7f7b79924badeb52fa7ddd0c88fe3.html