Yarn Monorepo中能否为各子包生成独立锁文件?
Yarn Monorepo子应用单独生成锁文件的解决方案
如果你用Yarn Workspaces搭建Monorepo,想给每个子应用生成独立锁文件以便单独部署,以下是可行的方法:
手动生成单个子应用锁文件
- 切换到目标子应用的目录(比如你的子应用在
packages/my-web-app下):cd packages/my-web-app - 运行以下命令生成当前目录的锁文件:
yarn install --no-workspace-lockfile --production=false--no-workspace-lockfile会忽略根目录的yarn.lock,强制在当前目录生成新的锁文件--production=false会安装所有依赖(包括开发依赖),如果只需要生产依赖,换成--production=true即可
- 子目录下会生成独立的
yarn.lock,部署时直接在该目录执行yarn install --production就能基于这个锁文件安装依赖。
批量生成所有子应用锁文件
如果有多个子应用,可以用脚本批量处理,避免重复操作:
#!/bin/bash # 遍历packages下的所有子应用目录 for app_dir in packages/*/; do echo "Generating lockfile for: $app_dir" # 进入子应用目录 cd "$app_dir" || continue # 生成锁文件 yarn install --no-workspace-lockfile --production=false # 返回根目录 cd - > /dev/null done
把脚本保存为generate-sub-lockfiles.sh,赋予执行权限后运行:
chmod +x generate-sub-lockfiles.sh ./generate-sub-lockfiles.sh
关键注意事项
- 根目录依赖更新后,需要重新生成子应用的锁文件,否则子应用的依赖版本会和根目录不一致
- 如果子应用依赖Monorepo内的其他本地包,单独部署前需要先将这些本地包打包(比如用
yarn pack)或者发布到私有仓库,否则单独部署时无法通过锁文件安装本地依赖
内容的提问来源于stack exchange,提问作者LoneWolfPR
相关产品推荐
相关产品推荐

