npm ci
将很高兴地安装“不正确”的平台软件包,但 cli 命令将因缺少软件包错误而失败。即使您没有混合平台团队,如果您使用 Docker 或 GitHub 操作,仍然可能会遇到问题。npm 或任何其他包管理器中是否有一种通用方法可以忽略锁定中的特定依赖项并在每次执行安装时解析它们?
例如,在 Linux 上安装 Vite 5 时,会添加 rollup 的锁定条目,最终
@esbuild/linux-x64
,这在 Mac 上不起作用。 esbuild 有一个 wasm 包可以用来代替,但这对于其他包来说也是一个问题(例如@tauri-app/cli)。我想要的是能够拉出一个项目并能够运行
npm ci
或
npm i
并让它实际为我的平台安装依赖项二进制文件,而不仅仅是锁定文件中的内容。我考虑过的不是很好的解决方案:
npm i
,但这标志着锁定文件已修改。您还可以从存储库中删除并忽略锁定文件。然而,这两者都有可能导致其他问题。
npm ci
时,只有相关软件包将安装在目标系统上。
例如:
在
package.json
"os": ["darwin", "linux", "windows"],
"cpu": ["x64", "arm64"],
删除
package-lock.json
npm install
具有特定于平台的选项的依赖项现在应该在每个组合的锁定文件中都有一个条目:
vite@^5.4.8
\[email protected]
|-@esbuild/[email protected]
|-@esbuild/[email protected]
|-@esbuild/[email protected]
\- ...etc