如何通过
package-lock.json
跳过安装可选依赖项?
npm ci
时出现错误。它已在 > 6.13.3 的版本中得到修复 - 也许早期版本也已修复,但我只能保证 6.13.4 及更高版本。
npm ci --no-optional
上述命令仅在我添加可选包时才有效
npm ci --no-optional
在package.json文件中
"optionalDependencies": {
"fsevents": "^2.3.2"
}
跳过/忽略可选的 pacakge,了解
npm ci --no-optional
如何与 package.json 和 pacakge-lock.json 交互非常重要。
npm
仅当 pakcage-lock.json 已使用
npm install --no-optional
npm ci --no-optional
才有效。
手动或通过
npm install --no-optional
添加
"optionalDependencies":
删除 pacakge-lock.json。npm install pacakge-name --save-optional
rm -rf node_modules/
npm install --no-optional
:您可以通过运行 npm ci --no-optional
来调试是否将某个包指定为可选注意
:这就是为什么建议将 trak pacakge-lock.json 与项目的 git 存储库一起保留的原因。
npm ls package-name
不起作用,而且可能从来没有起作用。但同时标志
npm ci --no-optional
起作用了。如果我们能够承受变异 --production
(例如在 docker 容器中),那么......所以我写了一个简单的脚本:
阅读
package.json
package.json
Object.assign(cfg.dependencies, cfg.devDependencies)
delete cfg.devDependencies
package.json
dependencies
devDependencies
optionalDependencies
时,我们得到了我们想要的东西 - 没有可选的依赖项(在我的例子中
npm ci --production
)。由于所有这些步骤都是在 docker 容器内执行的,因此我们可以进行变异 cypress
。但我不确定它也会对你有帮助。
package.json
:
9.8.0
标志已弃用,您可以使用 --no-optional
或 --omit=optional
。我将其添加到我的 .npmrc 文件中(在我的项目的根文件夹中,顺便说一下,它正在使用 npm 工作区)
--include=optional
现在,如果我在项目中运行
omit=optional
(或
npm ci
),默认情况下它不会安装可选依赖项。例如,要安装可选依赖项,请传递 npm install
标志
--include=optional