Package-lock. json 文件,包含“可选”: true

我的一个同事的 PR 包含一个 package-lock. json 更新,它添加了 "optional": true:

 "minimist": {
"version": "0.0.8",
"bundled": true,
-  "dev": true
+  "dev": true,
+  "optional": true
},
"minipass": {

我不知道这意味着什么,即使在谷歌周围。有人可以解释一下吗?

27083 次浏览

其中一个原因是:

一些 npm 软件包可能需要依赖软件包(如极简软件包)在不同的操作系统中工作。NPM 在 NPM 安装时将这个包标记为可选的,如果需要的话,根据所使用的操作系统不需要它。

请检查以下问题:

打开问题: package-lock. json 和可选的包: https://github.com/npm/npm/issues/17722

希望能有帮助。

来自 https://docs.npmjs.com/files/package-lock.json#optional:

如果为 true,则此依赖项或者是顶级模块的可选依赖项,或者是一个传递依赖项。对于既是顶层的可选依赖项又是顶层的非可选依赖项的传递依赖项的依赖项来说,这是错误的。

合并此更改是安全的。

您看到这种变化的原因很可能是因为 Npm 稍微改变了 package-lock. json 在版本6.6中的结构。你的伙伴基本上运行 npm install和 npm 6.6 + 在一个包锁定。Json 以前是用 npm 6.5-生成的。

通过确保团队中的每个人都使用最新版本的 npm,您应该能够避免此类问题。

在从依赖项中删除包之后,它的依赖项在 package-lock.json中被标记为 "optional": true

通常可以安全地手动或通过

$ rm -rf package-lock.json node_modules/
$ npm install

但是,这并不是100% 安全,因为有些软件包会更新到更新的版本。