为啥 package-lock.json 列出的依赖项与 package.json 不同?

Posted

技术标签:

【中文标题】为啥 package-lock.json 列出的依赖项与 package.json 不同?【英文标题】:Why does package-lock.json have different listed dependencies to package.json?为什么 package-lock.json 列出的依赖项与 package.json 不同? 【发布时间】:2020-11-19 00:31:00 【问题描述】:

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

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

所以我的问题是:

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

谢谢

【问题讨论】:

“我没有要求” - 但您安装的模块可能要求它们。 这能回答你的问题吗? Do I need both package-lock.json and package.json? 【参考方案1】:

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

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

"dependencies": 
    "eslint": "^7.5.0"

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

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

"dependencies": 
    "eslint": "7.5.0"

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

【讨论】:

好的,谢谢,这是有道理的。所以当我安装 npm 时,它会在我的 package.json 中安装所有依赖项,然后在我的 -lock 文件中安装所有依赖项?所以,简而言之,我可以在我的包文件中拥有版本自适应依赖项,并且在我的 -lock 文件中拥有版本锁定的依赖项,并且都安装在 npm install 命令上? @nodumbqs 1. “所以当我安装 npm 时,它会安装所有依赖项?”是的,这是正确的。 2.“都安装在 npm install 命令上?”可以,但在正常情况下,这应该由“主”包管理。 我很清楚,“'主'包”是什么意思? @nodumbqs 你使用npm install package实际安装的包

以上是关于为啥 package-lock.json 列出的依赖项与 package.json 不同?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 `npm install` 会为同一个 `package.json` 文件生成不同的 `package-lock.json` 文件?

为啥在 `npm install` 时`package-lock.json` 会导致 docker 容器构建失败?

为啥“npm install”会修改 package-lock.json?那为啥要把它提交给git呢?

为啥“npm install”不重写 package-lock.json?如果不存在也不生成新的?

为啥我所有的 npm 项目都有 package-lock.json 文件但只在一台计算机上?

为啥我的项目同时有 package-lock.json 和 yarn.lock 文件?