纱线中最接近“npm ci”的是什么

sha*_*unc 159 npm yarnpkg

在 npm 中,有一个ci用于安装处于干净状态的项目的命令。在文档中,声称

通过跳过某些面向用户的功能,它可以比常规的 npm 安装快得多。它也比常规安装更严格,可以帮助捕获由大多数 npm 用户增量安装的本地环境引起的错误或不一致。

npm ci纱线世界中最接近的命令是什么?也许答案是我们在 yarn 中不需要这个,因为它的架构是这样的,我们不需要特殊的模式。也许答案是使用一堆配置设置。但是,我没有找到这个问题的单一完整答案,我相信拥有它会很有价值。

fab*_*b67 262

我相信就这么简单:

yarn install --frozen-lockfile
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用的是 Yarn 2,则应该使用 **`--immutable`** 来代替,因为它已经取代了 `--frozen-lockfile`。 (24认同)
  • 根据文档正确 https://yarnpkg.com/en/docs/cli/install (14认同)
  • 纱线2呢? (3认同)
  • 根据文档,“--frozen-lockfile”被**视为遗留**:_“为了向后兼容,我们在“--frozen-lockfile”名称下提供了一个别名,但它将在稍后发布。"_ (2认同)

Kut*_*yel 91

对于较新版本的纱线,您应该使用:

yarn install --immutable --immutable-cache --check-cache
Run Code Online (Sandbox Code Playgroud)

正如Yarn 官方文档中所述:

如果--check-cache设置了该选项 [...]如果您既遵循零安装模型又接受来自第三方的 PR,则建议将其作为 CI 工作流程的一部分,因为否则他们有能力更改已检查的内容- 在提交包之前。


Cra*_*dow 52

不幸的是,由于 yarn 模块解析的工作方式,yarn install --frozen-lockfile有时仅仅这样做是不够的。您仍然可以使用无效的传递 deps。

要真正获得与npm ci您必须做的相同的行为:

rm -rf node_modules && yarn install --frozen-lockfile
Run Code Online (Sandbox Code Playgroud)

  • 如果您在 CI 上运行它,它可能已经安装在一个新文件夹中。已经存在 node_modules 意味着不好的做法。 (9认同)
  • @KostasKapetanakis 也许是因为人们正在使用不了解以前运行的瞬态构建代理? (3认同)
  • 的确!我想知道为什么这个答案不是得票最多的答案:(有时在优化之前我们会意外地为 Dockerfile 制作项目文件的完整副本(遗憾的是一些复制粘贴的“指南”......)这会导致一些令人头痛的问题时间...解释 npm CI 的文档使其更加明显:https://docs.npmjs.com/cli/v7/commands/npm-ci (2认同)

Mik*_* LP 13

根据@Crafty_Shadow 的建议,我让它更加集成。

包.json

  ...
  "scripts": {
    ...
    "preci": "rm -fr node_modules",
    "ci": "yarn install --frozen-lockfile"
  },
  ...
Run Code Online (Sandbox Code Playgroud)

  • @warden那是因为“npm ci”是一个本机命令“ci”。正如前面的评论所指出的,您必须使用“npm run ci”。 (4认同)
  • 仅使用 *yarn* 时,您将不会有 `package-lock.json` 文件。这是使用 *npm* 安装时创建的。您可能需要执行“npm run ci” (2认同)