为什么前端项目中要使用yarn.lock?
以下内容经过了脱敏处理
一、背景
下文中的“lock文件”指yarn.lock文件
二、解决方案
1.关于yarn.lock
下图是关于yarn.lock文件的官网介绍,其实也说明了我们以上遇到的问题的解决思路
大概翻译一下上述文档表达的内容
为了在机器上安装始终如一的依赖版本,yarn需要packjson之外的更多信息,为了解决这个问题,yarn引入了lockfiles文件。yarn的lockfiles和npm-shrinkwrap.json比较相似,他不会失真且可以重新生成。
- 被yarn管理
- 你的yarn.lock文件是被yarn指令自动全量生成的,当你通过yarn指令做 add/upgrade/remove操作时,他会自动更新yarn.lock文件。不要直接手动编辑这个文件,因为这样很容易产生错误和冲突。
- 只对应当前的package.json文件
- 在安装过程中,yarn只会使用最顶层的yarn.lock文件。最顶层的yarn.lock文件包含了你需要的依赖的所有的锁定的版本。
- 将yarn.lock提交到你的版本控制仓库中
- 所有的yarn.lock文件都应该被提交到代码仓库中(比如git或mercurial)。这样使yarn在所有的机器,不论是你同事的笔记本还是CI服务器上,都会安装完全相同的版本依赖。
- 框架和仓库也需要提交yarn.lock文件到版本控制仓库。不要担心他会对框架或库的使用者产生影响,因为使用者安装依赖时只会读取项目顶层的yarn.lock(而库或者框架的yarn.lock存在于node_modules/pkg/中)。
2.使用yarn.lock
2.不同于npm ci,在yarn中并不存在yarn ci这一指令,同时结合我们不希望普通的开发同学在开发中更新yarn.lock文件,结合yarn的使用说明,在业务中使用
rm -rf node_modules && yarn install --frozen-lockfile
为方便业务同学使用,将在项目的package.json中添加ci快捷指令
{
"private":"true",
"scripts":{
...,
"ci":"rm -rf node_modules && yarn install --frozen-lockfile "
}
} 3.注意的点,在我们的项目中,存在很多快捷脚本,如pack/dev.sh pack/build.sh pack/develop.sh pack/publish.sh等。要更新项目中这些shell脚本存在的yarn指令(添加了2中的快捷脚本后可以直接使用yarn ci)
3.收益
1.屏蔽掉业务逻辑之外的第三方发包对我们的影响,保证业务只要在生成yarn.lock时可构建,就一直可构建。
2.因为使用yarn.lock,所有的依赖版本都是确定的,安装过程中省去了包匹配环节,理论上会有2~5倍的依赖安装提速。
华为HUAWEI公司氛围 740人发布