今天在接触团队的一个新项目时,接触了一个多包管理利器,名叫 lerna。他优化了 git 和 npm 管理多包的工作流,包括更改多包版本号,以及自动在 git 中打 tag。
目前,vue,babel,react 等都在用。
链接
两种模式
Fixed/Locked mode (default)
vue,babel 都是用这种,在 publish 的时候,会在 lerna.json 文件里面”version”: “0.1.5”,,依据这个号,进行增加,只选择一次,其他有改动的包自动更新版本号。
Independent mode
lerna init –independent 初始化项目。 lerna.json 文件里面”version”: “independent”, 每次 publish 时,您都将得到一个提示符,提示每个已更改的包,以指定是补丁、次要更改、主要更改还是自定义更改。

一般操作
关联 git
git remote add origin git@git—address.git
登录 npm
//查看自己有无登录
npm whoami
//如果没有需要进行登录
npm login
// 查看当前 npm 配置
npm config -l
发布
//查看当前版本的包改动情况(如果不想用npx,需要全局安装 npx ,或局部安装指定 node_modules 下的 bin 脚本文件 )
npx lerna changed
//发布(自动改每个package 的version,并在 git 仓库中打 tag)
npx lerna publish
//如果已经打完 tag,但是发布失败了,可以去每个 package 根目录下,去执行手动发布
npm publish
//发布完成后,可以去包仓库 https://www.npmjs.com/ 查看有无发布成功
初始化
$ npm install lerna -g
$ mkdir lerna-gp && cd $_
$ lerna init # 用的默认的固定模式,vue babel等都是这个
# Add packages
$ cd packages
$ mkdir daybyday gpnode gpwebpack
...
#分别进入三个目录初始化成包
$ cd daybyday
$ npm init -y
$ cd ../gpnode
$ npm init -y
$ cd ../gpwebpack
$ npm init -y
项目结构
➜ lerna-gp git:(master) ✗ tree
.
├── lerna.json
├── package.json
└── packages
├── daybyday
│ └── package.json
├── gpnode
│ └── package.json
└── gpwebpack
└── package.json
4 directories, 5 files
//创建一个包,name包名,loc 位置可选
lerna create < name > [loc]