Yarn workspaces如何配置全局可用脚本?兼容ts、babel等开发工具
Yarn Workspaces 全局公共脚本实现方案
问题原因说明
你遇到的命令找不到问题,是Yarn 1.x版本的固有特性:子工作区执行yarn run时,默认只会搜索当前工作区node_modules/.bin路径下的可执行文件,不会向上继承根目录的可执行文件路径。
方案一:根目录全局挂载工具(轻量方案)
无需额外新建工作区,直接复用根目录配置即可实现:
- 第一步:在根目录
package.json中注册公共工具的脚本别名
{ "scripts": { "tsc": "tsc", "babel": "babel", "jest": "jest" } }
- 第二步:两种调用方式可选
- 直接在任意子工作区执行
yarn -w tsc即可调用根目录安装的工具,不需要修改子工作区配置 - 如果要保留
yarn tsc的调用习惯,可在子工作区package.json中添加别名:
{ "scripts": { "tsc": "yarn -w tsc" } } - 直接在任意子工作区执行
方案二:独立build工作区(高隔离规范方案)
完全收敛公共工具依赖,和根目录配置彻底隔离,适合中大型 monorepo 项目:
- 新增
build工作区,将其路径加入根目录package.json的workspaces字段中,比如根目录配置为"workspaces": ["packages/*"],则新建packages/build目录即可 - 进入
build工作区,安装所有公共工具依赖:
cd packages/build yarn add typescript @babel/core jest --dev
- 在
build工作区的package.json中通过bin字段暴露可执行命令:
{ "name": "@your-project/build", "version": "1.0.0", "bin": { "tsc": "./node_modules/.bin/tsc", "babel": "./node_modules/.bin/babel", "jest": "./node_modules/.bin/jest" } }
- 回到项目根目录执行
yarn install,Yarn会自动把build工作区暴露的可执行文件软链到所有子工作区的node_modules/.bin路径下,之后在任意子工作区直接执行yarn tsc等命令即可正常调用,所有依赖仅在build工作区安装一份,无冗余。
补充说明
如果使用Yarn 2及以上版本,默认的Plug'n'Play模式会自动处理全局工具的路径映射,无需额外配置软链,直接在根目录或公共工作区安装即可跨工作区调用。
内容的提问来源于stack exchange,提问作者user578895
相关产品推荐
相关产品推荐

