如何跳过通过“npm ci”安装可选依赖项?

问题描述 投票:0回答:6

如何通过

package-lock.json
跳过安装可选依赖项?
    

npm npm-install npm-ci
6个回答
14
投票


8
投票
npm ci

时出现错误。它已在 > 6.13.3 的版本中得到修复 - 也许早期版本也已修复,但我只能保证 6.13.4 及更高版本。

    


4
投票

npm ci --no-optional

上述命令仅在我添加可选包时才有效

npm ci --no-optional

在package.json文件中


2
投票
"optionalDependencies": { "fsevents": "^2.3.2" }

跳过/忽略可选的 pacakge,了解

npm ci --no-optional
如何与 package.json 和 pacakge-lock.json 交互非常重要。

    npm
  1. (仅当 pacakge-lock.json 不存在时才有效,否则会忽略 --no-optional)*
    仅当 pakcage-lock.json 已使用 
    npm install --no-optional
  2. ** 创建时,
  3. npm ci --no-optional
    才有效。
    
    
  4. * 这意味着如果您想将已安装的软件包设为可选,则必须这样做

手动或通过
    npm install --no-optional
  1. 添加
    "optionalDependencies":
    删除 pacakge-lock.json。
  2. 然后运行
  3. npm install pacakge-name --save-optional
  4. 终于跑了
  5. rm -rf node_modules/
  6. 添加这一点
  7. npm install --no-optional
  8. 不应该安装它。
    
    
  9. **
提示

:您可以通过运行 npm ci --no-optional

 来调试是否将某个包指定为可选

注意

:这就是为什么建议将 trak pacakge-lock.json 与项目的 git 存储库一起保留的原因。


1
投票
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
但我不确定它也会对你有帮助。


0
投票
package.json

9.8.0
标志已弃用,您可以使用
--no-optional
--omit=optional
我将其添加到我的 

.npmrc

文件中(在我的项目的根文件夹中,顺便说一下,它正在使用 npm 工作区) --include=optional

现在,如果我在项目中运行 
omit=optional

(或

npm ci
),默认情况下它不会安装可选依赖项。
例如,要安装可选依赖项,请传递 

npm install

标志

--include=optional

© www.soinside.com 2019 - 2024. All rights reserved.