多包管理利器lerna

多包管理利器lerna

Posted by nolan on April 20, 2020

今天在接触团队的一个新项目时,接触了一个多包管理利器,名叫 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 时,您都将得到一个提示符,提示每个已更改的包,以指定是补丁、次要更改、主要更改还是自定义更改。

image

一般操作

关联 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]