# 实战:管理多包项目
下面用一个简单案例演示 Lerna 在 Monorepo 中的典型使用。
# 目标
创建两个包:
@demo/utils:工具函数包@demo/core:业务包,依赖 utils
# 初始化仓库
mkdir demo-monorepo && cd demo-monorepo
npm init -y
npm install -D lerna
npx lerna init
1
2
3
4
2
3
4
# 创建两个 package
npx lerna create @demo/utils
npx lerna create @demo/core
1
2
2
# 编写示例代码
packages/utils/index.js
exports.sum = (a, b) => a + b;
1
packages/core/index.js
const { sum } = require("@demo/utils");
exports.calc = () => sum(1, 2);
1
2
3
2
3
# 处理包间依赖
如果配合 workspace,通常在 @demo/core 中声明依赖后,安装时会自动软链到本地包。
{
"dependencies": {
"@demo/utils": "^1.0.0"
}
}
1
2
3
4
5
2
3
4
5
# 批量执行脚本
给两个包都加上 build/test 脚本后,可在根目录统一执行:
npx lerna run build
npx lerna run test
1
2
2
# 只对变更包执行
npx lerna run build --since
1
适合 CI 场景,构建速度提升明显。
# 发布演示
npx lerna version
npx lerna publish from-git
1
2
2
# 小结
Lerna 在这个场景里主要解决了三件事:
- 多包统一管理与标准化命令执行
- 包之间依赖关系管理更清晰
- 发布流程可规模化、可自动化