yarn workspace使用指南
作用
Yarn workspace 是 Yarn 包管理工具中的一个功能,主要用于管理多包项目(monorepo)。它的主要作用如下:
- 支持多包结构:允许在一个仓库中管理多个独立的包或项目。
- 项目间依赖管理:方便地在不同包之间添加依赖,无需发布到npm。
- 统一依赖管理:所有包共享同一
yarn.lock
,确保依赖版本一致。 - 独立开发环境:每个包可以独立运行命令,如安装依赖或构建。
- 环境隔离:避免不同包间的依赖冲突。
- 版本控制:在单个仓库中管理所有包的版本。
使用方法
- 创建workspace,项目名为
workspace-root
,然后生成package.json
mkdir workspace-root
cd workspace-root
yarn init -y //初始化项目,生成package.json
- workspace项目必须声明私有,避免被发布
{// ...config"private": true,
}
- 新建packages目录,用于存放项目
- 在packages目录下创建两个项目,并生成
package.json
,如two、one
- 在two和one项目的package.json文件中声明name属性,该属性值即为workspace的名称,如:
{"name": "one", // workspace的名称"version": "1.0.0","main": "index.js","license": "MIT",
}
- 在workspace-root目录下的package.js中声明哪些项目是workspace,
"workspaces":["packages/*"]
表示packages目录下的所有项目都是workspace
{"name": "workspace-root","version": "1.0.0","main": "index.js","license": "MIT","private": true,"workspaces": ["packages/*"]
}
指令
yarn install
:安装所有依赖,在workspace-root目录下和one/two目录下执行作用是一致的yarn workspace [workspace名称(package.json中的name)] add [依赖名称]
:给项目添加依赖
yarn workspace one add dayjs
yarn workspace [workspace名称(package.json中的name)] remove [依赖名称]
:移除项目依赖
yarn workspace one remove dayjs
yarn workspaces run <command>
:在每个workspace下执行
yarn workspaces run dev
yarn workspaces info [--json]
:显示当前各workspace之间的依赖关系
注意事项
- 某个workspace不需要受yarn workspace管理,怎么办?
在workspace目录下添加.yarnrc文件, 并在文件中添加禁用指令
workspaces-experimental false
- 如果多个项目中依赖项目但版本不同时,怎么办?
注意:一般情况下two、one目录下并没有node_modules目录,如果two、one中依赖的版本不同时才可能会有
方式一:workspace-root中的node_modules下载的是dayjs@1.11.12
,在one中使用的是dayjs@1.11.13
,two使用的是dayjs@1.11.12
:
# one 项目
yarn workspace one add dayjs@^1.11.13
# two 项目
yarn workspace two add dayjs@^1.11.12
方式二:workspace-root中的node_modules下载的是dayjs@1.11.12
,在one中使用的是在one/node_modules目录下下载的dayjs@1.11.13
,two使用的是dayjs@1.11.12
(workspace-root/node_modules):
# one 项目
yarn workspace one add dayjs@1.11.13
# two 项目
yarn workspace two add dayjs@1.11.12