23

如何跳过安装可选依赖package-lock.jsonnpm ci

4

4 回答 4

11

您可以使用 npm ci --no-optional 。如果 npm 仍然安装可选包。然后在删除 package.lock.json 后尝试并再次运行该命令。

于 2018-12-29T12:34:49.807 回答
4

NPM 的npm ci --no-optional. 它已在 > 6.13.3 的版本中得到修复——也许更早的版本也是如此,但我只能保证 6.13.4 及更高版本。

于 2020-01-28T20:06:05.967 回答
1

我在 CI 工作流脚本中遇到了这个问题,甚至“--no-optional” 都不起作用

npm ci --no-optional

仅当我将可选包添加为时,上述命令才有效

"optionalDependencies": {
    "fsevents": "^2.3.2"
}

在 package.json 文件中

于 2021-08-15T01:34:20.800 回答
0

这不是一个合适的解决方案,而是一个丑陋的解决方案,但它帮助了我。它看起来npm ci --no-optional不起作用,可能从未起作用。但同时标志也--production有效。如果我们负担得起变异package.json(例如在 docker 容器中),那么......

所以我写了一个简单的脚本:

  • 读取package.json内容
  • Object.assign(cfg.dependencies, cfg.devDependencies)
  • delete cfg.devDependencies
  • 覆盖初始package.json

所以最后我们有:

  • dependencies包含正常和开发依赖项
  • devDependencies部分为空
  • optionalDependencies完好无损

当我们运行时,npm ci --production我们得到了我们想要的——没有可选的依赖项(在我的例子中cypress)。由于所有这些步骤都是在 docker 容器内执行的,我们可以 mutate package.json

但我不确定它是否也会帮助你。

于 2021-03-17T16:32:55.553 回答