使用 Lerna 管理前端 Packages

什么是 Lerna?

直接引用官方的一句话描述:

Lerna is a tool that optimizes the workflow around managing multi-package repositories with git and npm.

Lerna 是一个工具,它的主要工作,就是优化基于 gitnpm 工具管理多包(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`
}

标签: none

评论已关闭