package.lock.json 文件的正确使用方式是什么?

shy*_*am_ 3 npm package.json npm-install

文件的具体用途是什么package.lock.json?我读过它,但它很令人困惑。

  1. 假设我npm install这样做,它将创建一个package.lock.json文件,下次我这样做时npm install,它会保留文件中提到的相同软件包的安装吗package.lock.json

  2. 假设"^1.0.0"我的文件中定义了一个包版本package.json,并且 npm 注册表中提供了新版本。当我这样做时,它会更新软件包npm install,还是会与软件包中的内容保持相同package.json

  3. 有没有什么简单的方法可以package.json用确切的软件包版本号来更新文件,而无需手动一一更新?我想保持包的版本不变,这样下次任何人进行 npm install 时,他们应该得到完全相同的包。需要一个发布分支

实际上我需要文件的原始定义package.lock.json,但我发现其行为不一致。

我尝试使用 NPM CI 但失败并出现错误 node_gyp 需要 python https://github.com/nodejs/node-gyp/issues/1977

小智 6

package.lock.json 文件的具体用途是什么?

Ans:该文件用于描述最初生成的确切树,即最初用于安装的依赖项的版本(注意:如果 package.json 或 node_modules 被 npm 修改,它将始终被修改)

来源:https://docs.npmjs.com/configuring-npm/package-lock-json.html

现在回答您的具体问题:

  1. 假设我npm install这样做是为了创建一个package.lock.json文件,下次当我执行 npm install 时,它会保留文件中提到的相同软件包的安装吗package.lock.json

    简单的答案是:是的

    最初执行此操作时npm install,您需要指定包名称。npm 将创建node_modules文件夹和package-lock.json文件,并添加用于安装的版本的包条目。下次当您执行 npm install 时,如果不指定软件包,即使使用该符号,它也不会更新任何软件包,caret (^)因为这次 npm 将查看该package-lock.json文件(因为它存在于该文件中)并且将安装指定的相同版本在 ( package-lock.json) 文件中。

  2. 假设"^1.0.0"我的文件中定义了一个包版本package.json,并且 npm 注册表中提供了新版本。当我执行 npm install 时,它会更新软件包,还是会与 中的内容保持相同package.json

    package-lock.json正如第一个问题所解释的,如果目录中存在,则不会。仅当目录中不存在package-lock.json文件和文件夹时才会更新包。node_modules

  3. 有没有什么简单的方法可以package.json用确切的软件包版本号来更新文件,而无需手动一一更新?我想保持包的版本不变,以便下次有人这样做时npm install,他们应该得到完全相同的包。需要一个发布分支

    使用 是一个很好的做法npm ci,但您也可以使用npm update,这会将依赖项更新到最新的次要版本,并且您的package.json文件package-lock.json也会更新

对于生产,其首选方法是使用最初使用的相同版本的依赖项。在这种情况下,最好有package-lock.json文件,因此在应用程序的情况下,dockerizing当您这样做时,npm install它将安装使用的版本的依赖项package-lock.json