使用 Lerna 管理前端 Packages
什么是 Lerna?
直接引用官方的一句话描述:
Lerna is a tool that optimizes the workflow around managing multi-package repositories with git and npm.
Lerna 是一个工具,它的主要工作,就是优化基于
git
和npm
工具管理多包(multi-packages)构架项目的工作流。
初始化 Lerna 项目
mkdir catx
cd catx
初始化完成之后,项目目录如下:
.
├── lerna.json // lerna 配置文件
├── package.json // npm 包配置文件
└── packages // 子包
package.json 文件内容如下:
{
"name": "root",
"private": true,
"devDependencies": {
"lerna": "^3.14.1"
}
}
这个是当前的根项目,我们需要把里面的 name
属性改成自己根项目的名称,我的叫 catx
。
lerna.json 文件内容如下:
{
"packages": [ // 本项目有哪些子包
"packages/*" // packages 目录下面的所有包均是
],
"version": "0.0.0" // 当前版本号
}
新建第一个子包:api
cd packages
mkdir api && cd api
npm init -y
现在整个工程的目录结构如下:
.
├── lerna.json
├── package.json
└── packages
└── api
└── package.json
lerna
是如何工作的?
lerna
允许你在 固定版本 与 自主版本 两种方式中任选其一(Fixed or Independent)。
固定模式(Fixed)
简单来说,就是在 lerna.json
配置文件中保存一个 version
号,当你 lerna publish
时, lerna
会检测项目中所有的子包,只要有任何一个子包更新了,那么所有包都会同步更新版本,这是 Babel
项目现在使用的方式,如果有一个子包更新了主版本号,那么所有的子包都会同步更新。
自主模式
与固定模式相对的,自主模式允许你完全自主跟踪每一个子包的版本,包与包之间没有强关联。使用下面的命令初始化自主模式:
./node_modules/.bin/lerna init --independent
此时,再次查看 package.json
文件,内容如下:
{
"packages": [
"packages/*"
],
"version": "independent" // root 下 package.json 的版本号被设置为了 `independent`
}
评论已关闭