Monorepo 单一代码库
Monorepo 单一代码库
问题
一般项目是独立创库管理(既:多代码库multirepos),一些基础的组件、工具函数,或者一些配置项会在多个项目中重复使用,除了copy一份之外,就是将依赖发布为一个npm包,当依赖项发生修改时,需要重新发布npm包,当修改频繁时,这种方式就显得尤为繁琐。
单一代码库
monorepo单一代码库,既所有项目都在同一个仓库中,共享依赖。
yarn workspaces[1]
基本概念
workspace-root:工作区根目录,存放所有依赖项。workspace:工作区目录,存放单个项目。
配置
在workspace-root下package.json文件添加一下内容。
// package.json
{
...
// 因为根目录包含特定的业务代码,与其它项目共享无意义,所以官方将次包置为私有,以保证不会发布出去
"private": true,
// 项目目录
"workspaces": [ "packageA", "packageB" ],
// 当项目存放在同一个目录时,可以采用全目录引用的方式
"workspaces": [ "packages/*" ],
}
在workspace-root下执行yarn安装依赖。
请注意,workspace没有自己的 yarn.lock 文件,workspace-root yarn.lock 包含所有工作区的所有依赖项。
依赖管理
# 在工作区根目录安装
yarn -W add [package]
# 在指定工作目录安装
yarn workspace [workspaceName] add [package]
运行
# 运行指定项目指令
yarn workspace a run dev
# 运行所有项目指令
yarn workspaces run dev
请注意,yarn workspaces run dev是串行的,意味着开发模式第一个起来服务会阻塞之后的的命令。
可以使用npm-run-all[2]并行执行命令,在 worksapce-root 中安装。
yarn -W add npm-run-all
在workspace-root下package.json增加如下配置。
"scripts": {
"dev": "npm-run-all -p dev:*",
"dev:a": "yarn workspace a run dev",
"dev:b": "yarn workspace b run dev",
"dev:c": "yarn workspace c run dev"
},
运行yarn run dev即可启动所有项目。
官方文档 yarn workspaces https://classic.yarnpkg.com/en/docs/workspaces ↩︎
官方文档 npm-run-all https://github.com/mysticatea/npm-run-all/blob/master/docs/npm-run-all.md ↩︎

浙公网安备 33010602011771号