之前用nx很容易搭建一款优秀的monorepe工程,由于公司一直用umijs框架开发,索性尝试一下用umi搭建一下; 无意中发现 umi支持通过lerna搭建monorepe 所以简单记录当时的操作过程;
创建工作区
npm i -g lerna nx
mkdir mating-workspaces && cd mating-workspaces
# lerna 创建工作区
npx lerna init
cd packages
npx create-umi@latest eagle-viewer
npx create-umi@latest eagle2-viewer
注意 不需要安装;
分别打开 packages/eagle-viewer/package.json、packages/eagle2-viewer/package.json 增加name属性(umi 没加上name);
# lerna 引导项目,并安装包
npx lerna bootstrap
注意: 全程用npm 装包;
# nx 指定缓存 的交互
npx nx init
其次,让我们标记build和test成为可缓存的操作。
npx add-nx-to-monorepo
// 他会修改 nx.json
{
"tasksRunnerOptions": {
"default": {
"runner": "nx/tasks-runners/default",
"options": {
"cacheableOperations": ["build", "test"]
}
}
}
}
# 测试一下命令是否可以正确执行:
npx lerna run test --no-sort
npx lerna run build
npx lerna run dev --scope=eagle-viewer
# 再次执行,是否cache;
cd packages/eagle-viewer
npx max g jest
mkdir libs/ui
npx create-father ui
同样的,跳过安装步骤;
然后修改root Package.json,workspaces中添加"libs/" (如果是三级目录 "libs/**/")
"workspaces": [
"packages/*",
"libs/**/*"
],
执行
# 自动更新npm 引导,
npx lerna bootstrap
cd libs/ui/image-viewer
# 执行father generators 开启jest 测试
npx father g jest