ChatGPT解决这个技术问题 Extra ChatGPT

我需要 package-lock.json 和 package.json 吗?

将我的 NPM 更新到最新版本(从 3.X 到 5.2.0)并在现有项目上运行 npm install 后,我得到一个自动创建的 package-lock.json 文件。

我可以说 package-lock.json 给了我一个确切的依赖关系树,而不是 package.json

仅从该信息来看,package.json 似乎是多余的,不再需要了。

它们都是 NPM 工作所必需的吗?
仅使用 package-lock.json 文件是否安全或可能?

package-lock.json (doc1, doc2) 上的文档没有提及任何相关内容。

编辑:

经过一番思考后,我得出的结论是,如果有人想将您的项目与旧版本的 NPM(5.x 之前)一起使用,它仍然会安装所有依赖项,但版本不太准确(补丁版本)

@Omri 除非您以 Java 方式执行此操作,并且工具版本由您的项目确定。 IE。如果我在我的回购中回到 1 年,它使用的是旧版本的 gradle,所以我从不担心。
大多数人不做我推荐的事情,这就是为什么 npm 可能不得不同时保留 java 中的 where,gradle wrapper 的设置正是为了做到这一点,这样他们就可以从一个文件移动到另一个文件,并且为了向后兼容而没有重复。

m
mastef

您需要 package-lock.jsonpackage.json 吗?

您需要 package.json 吗? 是的

你能有一个只有 package-lock.json 的项目吗?

package.json 不仅仅用于依赖项 - 例如定义项目属性、描述、作者和许可证信息、脚本等。package-lock.json 仅用于将依赖项锁定到特定版本号。


而不是 npm install 使用 npm ci 根据 package-lock.js 安装依赖项 - 请参阅 docs.npmjs.com/cli/v8/commands/npm-ci
N
Narendar Reddy M

package-lock.json:记录每个已安装软件包的确切版本,以便您重新安装它们。未来的安装将能够构建一个相同的依赖树。

package.json:记录您应用所需的最低版本。如果您更新特定软件包的版本,则更改不会在此处反映出来。


如果上述情况属实,并且 package.json 记录了应用程序所需的最低版本,并且 package-lock.json 记录了每个已安装包的确切版本,那么我遇到了一个奇怪的情况,即模块设置为 0.112 版本。 package.json 中的 1 和 package-lock.json 中的 0.110.0 ...
r
rohit.khurmi095
 Package.json vs Package.lock.json

https://i.stack.imgur.com/pSzRD.png

https://i.stack.imgur.com/CnIxx.png


这是很好的信息,但来源是什么?
S
Stanley Kirdey

如果您的问题是是否应该将锁定文件提交给您的源代码管理 - 它应该。在某些情况下会被忽略。

我发现它膨胀了拉取请求和提交历史,所以如果你看到它发生变化,请为它做一个单独的提交。


不,我不是在询问对源代码控制的提交。如果 NPM 需要它们同时工作。 package-lock.json 似乎是 package.json 的更详细版本,因此仅使用锁定文件是否安全或可能。
我明白了,我把 package.json 留在了我的项目中,主要是为了给 npm 脚本留一个位置。
现在有一个关于是否将 package-lock.json 置于版本控制之下的 separate question
V
Vivek Goel

可以找到关于保留 package-lock.json 背后原因的更准确和详细的解释here