Node.js 为什么在不同的系统上运行“npm install”时会得到截然不同的“package lock.json”文件

Node.js 为什么在不同的系统上运行“npm install”时会得到截然不同的“package lock.json”文件,node.js,npm,package-lock.json,Node.js,Npm,Package Lock.json,对于相同的git存储库,如果我删除node_模块和package lock.json,我的期望是运行npm install每次都应该生成相同的package lock.json文件(提供或获取一些模块,发布者可能会在这期间更新这些模块) 我发现,根据我是在OSX机器上还是在Linux机器上执行此操作,我得到的文件有很大不同 这是预期的吗?如果是,提交包锁.json文件有什么价值,因为它在其中一个系统上是无效的。如果不是,这里会发生什么?某些依赖项在某些平台上是可卸载的。您可能有一些依赖项可以安装

对于相同的git存储库,如果我删除
node_模块
package lock.json
,我的期望是运行
npm install
每次都应该生成相同的
package lock.json
文件(提供或获取一些模块,发布者可能会在这期间更新这些模块)

我发现,根据我是在OSX机器上还是在Linux机器上执行此操作,我得到的文件有很大不同


这是预期的吗?如果是,提交
包锁.json
文件有什么价值,因为它在其中一个系统上是无效的。如果不是,这里会发生什么?

某些依赖项在某些平台上是可卸载的。您可能有一些依赖项可以安装在OSX机器上,但不能安装在Linux上。这就是为什么ev每次执行
npmi
,都会更新
包锁.json

例如,正如一些其他用户指出的,有一个包
fsevents
包对操作系统有严格的要求

您可以在github上找到一些未解决的问题:


在很多软件包中都有特定于操作系统的
可选依赖项
。例如,我看到的一个常见的依赖项是
fsevents
。这肯定会让人头疼。看吧,是的……这似乎很相关……但这不意味着如果您在多个平台上开发,提交文件是完全不合适的吗OSX系统上的e不应应用于Linux系统……是的。我在Thread上的效果更好。您使用的是什么NPM版本?截至今天,此答案中的链接已存档。目前有一个新的类似的公开问题:(奇怪的是,2月14日有人否认该问题)。