8

我明白了package-lock.json代表什么,但我不明白添加此文件后插入符号范围如何工作?

假设我有一个包 ( my-module),我想拥有所有新的非破坏版本而不手动指定新版本。我安装了最新版本,这是package.json文件中的结果:

"my-module": "^4.1.1"

但是package-lock.json,也通过修复 to 的版本进行了my-module更新4.1.1

下次出新版本时my-module: 4.1.2。运行npm i不会安装,因为里面的版本package-lock.json固定的旧版本。

问题

我怎样才能在不创建新文件的情况下npm i下载最新的非破坏版本?该文件是否只是使用插入符号范围无效?my-modulepackage-lock.json

4

2 回答 2

4

虽然我不喜欢逐字发布文档,但我认为它是解释为什么您所要求的正是package-lock.json设计为不必要做的最佳来源:

  1. package-lock.json会为 npm 修改node_modules树或package.json的任何操作自动生成。

  2. 它描述了生成的确切树,以便后续安装能够生成相同的树,而不管中间依赖项更新如何。

package.json被输入到npm i操作的结果是一个文件系统node_modules ,与package.json文件中声明的所有依赖项一致。

此操作不会始终产生相同的结果:即使使用完全相同的package.json文件也是如此。这样做是有充分理由npm i的,特别是:

  • 如果自上次安装包以来可能已经发布了直接 semver-range 包的新版本,则将使用更新的版本。
于 2018-10-06T04:21:38.703 回答
4

我们提出了preinstall使用package.json.

因此,在您的package.json文件中的脚本标签下添加: "preinstall": "npm update".

由于npm update仅更新受插入符号范围语法影响的软件包,因此您可以同时拥有package-lock.json最新更新。

于 2018-04-25T15:44:24.433 回答