lerna 是一个 monorepo 工具,用来在一个仓库中管理多个项目。而我最近向造个轮子,这个轮子需要抽离出一些组件库,且自身也会用到。而 lerna 就非常适合这种场景。
下载
全局下载
yarn global add lerna
或npm install lerna -g
初始化项目
cd lerna-demo && cd lerna-demo
然后lerna init
执行完 init 后会多出一个packages
目录和lerna.json
,并且会配置一个workspace
- 创建不同的项目
然后我们可以在 packages 中创建不同的项目,具体代码可以查看lerna-demo
代码里有个需要注意的点就是打包配置中设置的打包方式要和你引入的方式是一致的,或者直接在打包配置中设置
esm
、cjs
和umd
三种方式,然后根据不同的规范去引入不同的代码。
这里我们有三个项目header
, footer
, website
webstite 就是我们的项目,其他两个是组件库。而我们需要在 website 中使用它们。那么就需要在 website 的 package.json 中导入,方法如下:
{
// ...
"dependencies": {
// ...
"header": "*",
"footer": "*"
}
}
这样就相当于告诉 lerna 去 link workspace 中的header
和footer
,就像npm install
了一样。
然后再yarn
执行一下命令
打包项目
如果需要打包所有的项目则直接运行lerna run build
lerna 会按照依赖顺序,先打包header
和footer
,最好再打包website
也可以使用--scope
配置 指定需要打包的项目lerna run build --scope header --scope footer
,这样,website 项目就不会被打包。
运行单元测试也同上。
项目运行
打包好了两个依赖项目后,就可以运行website
了,
lerna run dev --scope=website
也可以不加--scope
,因为其他两个项目中并没有dev
这个运行命令。
最后就可以直接访问了