ChatGPT解决这个技术问题 Extra ChatGPT

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

在 npm 中,有一个 ci 命令用于以干净状态安装项目。在文档中,it is claimed 表示:

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

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


P
Pang

我相信就这么简单:

yarn install --frozen-lockfile

纱线2呢?
如果您使用的是 Yarn 2,则应使用 --immutable,因为它已取代 --frozen-lockfile
@BuZZ-dEE 检查我的最新答案 stackoverflow.com/a/69944063/2834553 😉
根据文档,--frozen-lockfile 被视为旧版“为了向后兼容,我们提供了一个名为 --frozen-lockfile 的别名,但将在以后的版本中删除。”
V
VanTanev

不幸的是,由于 yarn 模块解析的工作方式,仅执行 yarn install --frozen-lockfile 有时是不够的。您仍然可以留下无效的传递依赖。

要真正获得与 npm ci 相同的行为,您必须执行以下操作:

rm -rf node_modules && yarn install --frozen-lockfile

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

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

yarn install --immutable --immutable-cache --check-cache

the official Yarn docs 所述:😉

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


M
Mike LP

在@Crafty_Shadow 的建议的基础上,我使它更加集成。

包.json

  ...
  "scripts": {
    ...
    "preci": "rm -fr node_modules",
    "ci": "yarn install --frozen-lockfile"
  },
  ...

这对我不起作用,在我的情况下,npm 似乎看不到 package.json“ci”定义,但不知道为什么..(注意,我没有 package-lock.json,我只是想以通用方式对纱线项目使用 npm ci)。
仅使用 yarn 时,您将没有 package-lock.json 文件。这是使用 npm 安装时创建的。您可能需要执行 npm run ci
@warden 那是因为 npm ci 是本机命令 ci。正如前面的评论中所指出的,您必须使用 npm run ci