答案 0 :(得分:12)
来自https://docs.npmjs.com/files/package-lock.json#optional:
如果为true,则此依赖项仅是顶层模块的可选依赖项,或者是一个传递性依赖项。对于既是顶层的可选依赖关系又是顶层的非可选依赖关系的传递性依赖关系的依赖关系,都是错误的。
安全合并此更改。
您看到此更改的原因很可能是npm slightly changed how package-lock.json is structured in version 6.6。您的伴侣基本上是在先前由npm 6.5-生成的package-lock.json上以npm 6.6+运行npm install
。
通过确保团队中的每个人都使用最新版本的npm,您应该能够避免此类问题。
答案 1 :(得分:2)
原因之一是:
某些npm软件包可能需要依赖的软件包(例如minimist)才能在不同的OS上运行。 NPM在npm安装时将此软件包标记为可选,如果有的话,根据您使用的操作系统,不需要。
请检查以下问题:
公开问题:package-lock.json和可选软件包:https://github.com/npm/npm/issues/17722
希望有帮助。
答案 2 :(得分:0)
从依赖项中删除软件包后,其依赖项在"optional": true
中标记为package-lock.json
。
通常可以安全地手动或手动移除此类包装
$ rm -rf package-lock.json node-modules/
$ npm install
但是,这并不是100%安全的,因为某些软件包将更新为较新的版本。