当package.json和yarn.lock不同步时,如何使yarn在yarn install时失败?

3
在一个项目中,我已经用yarn代替了npm,以便享受它带来的好处,同时也通过yarn.lock强制锁定我们的依赖关系。
现在,开发人员使用npm@4添加了一个库,这只修改了package.json,而没有改变yarn.lock。
我本来期望yarn install命令在构建服务器上崩溃,但是yarn有了对我意外的行为,它会将当前最新版本的这些库添加进去,然后更新远程的yarn.lock。
$ yarn install
[1/4] Resolving packages...
[2/4] Fetching packages...
warning fsevents@1.1.2: The platform "linux" is incompatible with this module.
info "fsevents@1.1.2" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
Done in 5.07s.

这与yarn的目的相矛盾,因为构建任务不会将yarn.lock推回存储库,也不应该这样做。
我希望每个开发人员负责他们正在检入的版本。
因此,如果package.jsonyarn.lock不同步,是否有一种方法使yarn install退出并显示错误代码?

我在 yarn 的 Github 仓库上开了一个问题(https://github.com/yarnpkg/yarn/issues/4147)。 - k0pernikus
1个回答

2

您需要使用 --frozen-lockfile 参数:

$ yarn install --frozen-lockfile
yarn install v0.27.5
warning ../package.json: No license field
[1/4] Resolving packages...
error Your lockfile needs to be updated, but yarn was run with `--frozen-lockfile`.

这也在最近的 yarn install 文档 中明确说明了:

yarn install

将 package.json 中列出的所有依赖项安装到本地 node_modules 文件夹中。

使用以下方式利用 yarn.lock 文件:

  • 如果存在 yarn.lock 并且足以满足 package.json 中列出的所有依赖项,则安装 yarn.lock 中记录的确切版本,并且 yarn.lock 不会更改。Yarn 不会检查更新的版本。
  • 如果不存在 yarn.lock,或者不足以满足 package.json 中列出的所有依赖项(例如,如果您手动将依赖项添加到 package.json 中),Yarn 将查找可用于满足 package.json 中约束条件的最新版本。结果将写入 yarn.lock。

如果要确保不更新 yarn.lock,请使用 --frozen-lockfile.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接