如何直接从GitHub将自有monorepo作为package.json依赖引入?
解决方案
该需求可以通过yarn classic原生支持的git子包路径语法+依赖别名实现,无需将包发布到npm registry。
正确配置语法
你需要在git地址的tag/提交哈希后,加冒号拼接子包在monorepo中的相对路径,示例如下:
"dependencies": { "@my-module/client": "https://github.com/username/my-module.git#v0.0.12:packages/client", "@my-module/server": "https://github.com/username/my-module.git#v0.0.12:packages/server" }
语法说明
#v0.0.12指定仓库的版本标签,也可以替换为具体的提交哈希- 冒号后的
packages/client是子包在monorepo仓库中的相对路径,需要确保该路径下存在独立的package.json文件 - 左侧的包名可以直接写你需要的scoped包名(如
@my-module/client),yarn会将路径下的子包识别为对应名称的依赖,和从npm registry拉取的行为完全一致
错误写法原因
- 直接将仓库地址赋值给scoped包名:yarn会将整个仓库作为依赖内容安装,不会自动定位到子包目录,因此无法正常引用
- 在git url后直接拼接子路径:git协议本身不支持直接拉取仓库下的子目录作为独立仓库地址,因此会提示路径无效
额外说明
- 该语法同时支持HTTPS和SSH格式的git地址,例如SSH写法为:
git@github.com:username/my-module.git#v0.0.12:packages/client - 子包自身的依赖会被yarn正常解析安装,无需额外配置
内容的提问来源于stack exchange,提问作者LongHike
相关产品推荐
相关产品推荐

