package.lock.json 文件的正确用法是什么?

What is the correct use of package.lock.json file, when exactly it works

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

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

  2. 假设我的 package.json 文件中有一个定义为 "^1.0.0" 的包版本,并且在 npm 注册表中有一个新版本可用。它会在我执行 npm install 时更新程序包,还是会与 package.json 中的内容保持一致?

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

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

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

package.lock.json 文件的确切用途是什么?

回答: 该文件用于描述最初生成的确切树,即最初用于安装的依赖项的版本(注意:它总是如果 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. 假设我的 package.json 文件中有一个定义为 "^1.0.0" 的包版本,并且新版本在 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[] 中使用的版本的依赖项。 =36=]