如何用Yarn实现类似Composer的Node依赖包本地开发提PR工作流?
解决方案
针对Yarn管理单体仓库依赖的场景,推荐以下几种可行的工作流:
1. 使用resolutions字段指定本地包路径(推荐)
在otp-react-redux的package.json中添加resolutions字段,直接将目标包指向本地克隆的目录:
{ "resolutions": { "@opentripplanner/geocoder": "file:../otp-ui/packages/geocoder" } }
执行yarn install后,Yarn会将该包软链接到本地目录。注意:
- 先在otp-ui根目录执行
yarn install && yarn build,确保依赖安装完成且包已编译,否则主项目可能找不到可用文件。 - 修改geocoder代码后,在对应目录执行
yarn build(或yarn watch开启实时编译),主项目会自动同步修改。
2. 启用Yarn Workspaces(适合多包联动开发)
如果需要同时修改otp-react-redux和otp-ui的多个包,可将两个仓库放在同一目录下,创建根目录的package.json启用工作区:
{ "private": true, "workspaces": [ "otp-react-redux", "otp-ui/packages/*" ] }
在根目录执行yarn install,Yarn会自动关联所有工作区的包,你可以直接在各自目录修改代码,无需额外链接操作。
3. 修复yarn link的问题
之前的yarn link失败,大概率是因为本地geocoder包未编译。解决步骤:
- 在克隆的otp-ui根目录执行
yarn install安装所有依赖。 - 进入
otp-ui/packages/geocoder执行yarn build完成编译。 - 重新执行
yarn link,再回到主项目执行yarn link "@opentripplanner/geocoder"。 - 若仍报错,检查主项目
package.json中该包的版本是否与本地克隆版本一致,或删除主项目的node_modules和yarn.lock后重新安装链接。
4. 从Git仓库安装并保留Git目录
如果你需要直接从Git仓库安装并保留.git目录,可使用Yarn的Git协议,加上分支/提交哈希,并添加--prefer-source参数:
yarn add git+https://github.com/opentripplanner/otp-ui.git#main:packages/geocoder --prefer-source
安装后目标目录会有.git文件夹,你可以直接修改代码,之后推送到自己的fork并提交PR。注意:这种方式修改后需要重新安装才能同步到主项目,不如本地链接便捷。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

