如何使用Yarn从Monorepo子目录添加指定子包
从Fork的Expo Monorepo单独引入expo-speech子包的正确方法
Yarn 1.x(1.22.19)方案
Yarn 1支持直接通过Git URL指定monorepo子目录,执行以下命令即可安装你修改后的子包:
yarn add github:my-org/expo#main:packages/expo-speech
如果遇到缓存或依赖解析问题,先清缓存再强制安装:
yarn cache clean yarn add github:my-org/expo#main:packages/expo-speech --force
Yarn 3.x(3.3.1)方案
Yarn 3的语法略有不同,两种可行写法:
- 直接指定子路径:
yarn add "my-org/expo#main/packages/expo-speech" - 用
subdir参数明确指定:yarn add "github:my-org/expo#main?subdir=packages/expo-speech"
要是后续需要频繁更新这个包,可以在项目根目录的.yarnrc.yml里加个配置简化命令:
npmScopes: my-org: npmRegistryServer: "https://github.com" npmAlwaysAuth: false
之后直接用别名安装:
yarn add @my-org/expo-speech@github:my-org/expo#main/packages/expo-speech
备选方案:用patch-package绕开Git安装问题
如果上述Git方式都走不通,换个思路:先装官方包,再用补丁应用你的修改:
- 安装官方expo-speech:
yarn add expo-speech - 把你fork仓库里
packages/expo-speech的修改文件,覆盖到项目的node_modules/expo-speech对应位置 - 生成补丁文件:
npx patch-package expo-speech - 把生成的
patches/文件夹提交到版本控制,后续yarn install时补丁会自动生效
排查要点
- 确认你的fork仓库
main分支里确实有修改后的packages/expo-speech代码 - 注意Yarn 1和3的Git子目录语法差异,别搞混了
- 遇到依赖冲突,直接删
node_modules和yarn.lock重装:rm -rf node_modules yarn.lock yarn install
内容的提问来源于stack exchange,提问作者gabe
相关产品推荐
相关产品推荐

