# 安装

安装并查看 lerna 版本

1
npx lerna -v

# 创建项目并初始化 lerna 项目

1
2
3
mkdir new-lerna-demo
cd new-lerna-demo
lerna init

# 创建 a 包

1
lerna create a

一路回车,将 packages/a/package.json 的 name 字段改成 @gamejoye/a,设置 type“module”,修改 packages/a/lib/a.js 的内容为 ESM 模块的形式

# 为 a 包添加依赖

给 a 包添加依赖,这里以 loadsh 为例子

1
npm i lodash -w @gamejoye/a

# 创建 b 包

1
lerna create b

一路回车,将 packages/b/package.json 的 name 字段改成 @gamejoye/b,设置 type“module”,修改 packages/b/lib/b.js 的内容为 ESM 模块的形式

# 创建 cli 包

1
npx lerna create cli --access public --bin --es-module

这里标志为 public,并配置 bin 字段提供一个命令行命令,并配置为 ESM 模块形式
修改 bin/cli:

1
2
3
4
5
6
7
#!/usr/bin/env node

'use strict';

import cli from '../src/cli.js';

cli().parse(process.argv.slice(2));

修改 src/cli

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import factory from 'yargs/yargs';

export default function cli(cwd) {
const parser = factory(null, cwd);

parser.alias('h', 'help');
parser.alias('v', 'version');

parser.usage(
"$0",
"TODO: description",
yargs => {
yargs.options({
// TODO: options
});
},
);

return parser;
}


# 同步依赖

更新所有 workspaces 中的依赖

1
npm i -ws

# 配置 root/package.json

添加

1
2
3
4
5
{
"scripts": {
"lerna-cli": "cli"
}
}

# 运行命令

这行命令会输出 10.5.0 代表 npm 的版本

1
npm run lerna-cli -v

# 打通包之间的关系

要在 cli 中使用 a 包和 b 包

1
npm i @gamejoye/a @gamejoye/b -w packages/cli

改造 bin/cli

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env node

'use strict';

import cli from '../src/cli.js';

import a from '@gamejoye/a';
import b from '@gamejoye/b';
console.log(a());
console.log(b());

cli().parse(process.argv.slice(2));

运行如下命令会输出

1
npm run lerna-cli

Hello from a
Hello from b

# 发布版本

lerna version 会让你选择下一个版本号,并自动更新子包下 package.json 的 version 字段,同时进行 push 到远程并打上 tag

1
2
3
4
5
git add .
git commit -m 'first commit'
git remote add origin https://github.com/gamejoye/new-lerna-demo.git
git push -u origin master
lerna version

lerna publish

更新于 阅读次数