为什么 package-lock.json 与 package.json 有不同的列出的依赖关系?

Why does package-lock.json have different listed dependencies to package.json?

我安装了 eslint 并注意到它初始化了一个 package-lock.json 文件并在我的 node_module 文件夹中安装了一堆我没有请求的模块。我不知道为什么。

更重要的是,我的 package.json 和 package-lock.json 列出的依赖项之间存在差异。我的理解是 package.json 列出了我安装的依赖项及其 semver 和 package-lock 确保我使用的确切版本也被安装模块的任何其他人使用。

所以我的问题是:

  1. 为什么会有差异广告他们不应该有镜像列出的依赖项?
  2. 哪个 .json 会根据要求安装依赖项,为什么?
  3. 为什么首先从 eslint 安装这些?

谢谢

package.json 中列出的依赖项是您使用 npm install 安装的依赖项。

当你 运行 npm install eslint 时,npm 将在 dependencies 中添加一行带有 eslint 和安装的版本。

"dependencies": {
    "eslint": "^7.5.0"
}

package-lock.json 文件包含 所有 依赖项 - 您安装的依赖项和其他软件包所需的依赖项。例如,eslint36 Dependencies(检查“依赖项”选项卡)。

要安装特定版本的 eslint,您应该 npm install eslint@7.5.0package.json 文件现在将引用该特定版本:

"dependencies": {
    "eslint": "7.5.0"
}

请注意 ^ 符号未显示。该符号表示与版本兼容并遵循semver。您可以检查其他选项 here.