在一个项目中,我用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.json
和yarn.lock
不同步,有没有办法让yarn install
退出并显示错误代码?
您需要--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 安装文档中也明确了这一点:
yarn install
安装 package.json 中列出的所有依赖项 在本地node_modules文件夹中。
yarn.lock
文件按如下方式使用:
- 如果 yarn.lock 存在并且足以满足所有依赖项 在package.json中列出,yarn.lock中记录的确切版本是 已安装,并且 yarn.lock 将保持不变。纱线不会检查 较新的版本。
- 如果 yarn.lock 不存在,或者不足以满足 package.json 中列出的所有依赖项(例如,如果您 手动将依赖项添加到package.json(,Yarn 寻找最新的 满足 package.json 中约束的可用版本。这 结果将写入 Yarn.Lock。
如果要确保 yarn.lock 未更新,请使用
--frozen-lockfile.