lerna 包管理

背景

对于同时要维护多个npm包的同学来说,包管理是个令人头疼的问题,这些包是放在一个仓库还是放在分开的仓库,包数量少的时候,包的维护不会有太多的问题,但是当包的数量越来越多,就会出现越来越多的问题:

1.包之间的依赖关系如何管理

2.包的版本如何进行更替升级

带着这些问题,我们来看下lerna

lerna

什么是lerna?看下lerna的定义

A tool for managing JavaScript projects with multiple packages. Lerna is a tool that optimizes the workflow around managing multi-package repositories with git and npm.

翻译: Lerna 是一个用来优化托管在gitnpm上的多package代码库的工作流的一个管理工具,可以让你在主项目下管理多个子项目,从而解决了多个包互相依赖,且发布时需要手动维护多个包的问题。

从定义可以看出,可以解决上面提出的问题,更为开发人员提供了一种管理多个包的方式。比如有A包和B包,A包依赖B包,改了B包之后,用lerna发布的时候,会同时发布A和B两个包,而这个依赖关系不用你去记住,lerna会帮你解决这一切~关于包的版本管理后面再说~

使用

lerna配置

lerna初始化项目,运行如下命令

npm i lerna -g
lerna init

然后会生成以下目录结构

| packages
| lerna.json
| package.json

lerna.json的配置文件

{
  "packages": [
    "packages/*" //存放包的文件夹,可以配置多个
  ],
  "version": "1.0.0",//lerna版本号
  "command": {
    "publish": {
      "message": "chore(release): publish %s" //发布时的日志格式
    }
  },
  "ignoreChanges": [
    "**/*.md"
  ]
}

常用命令

安装依赖

为packages文件夹下的package安装依赖

lerna add <package>[@version] [--dev] # 命令签名
//例子
lerna add module-1 --scope=module-2 # 将 module-1 安装到 module-2
lerna add module-1 --scope=module-2 --dev # 将 module-1 安装到 module-2 的 devDependencies 下
lerna add module-1 # 将 module-1 安装到除 module-1 以外的所有模块
lerna add babel-core # 将 babel-core 安装到所有模块

卸载依赖

lerna exec -- <command> [..args] # 在所有包中运行该命令
//例子
lerna exec --scope=npm-list  yarn remove listr # 将 npm-list 包下的 listr 卸载
lerna exec -- yarn remove listr # 将所有包下的 listr 卸载

删除安装依赖

lerna clean

查看包是否发生了变化

lerna updated/diff

显示packages下的所有package的版本

lerna ls

查看本地所有包列表

lerna list

发布包

lerna publish

发布前查看哪些包发生了变化

lerna changed

lerna工作流

lerna的工作流如下

lerna bootstrap     // 安装依赖包
lerna list          // 本地依赖包
lerna changed       // 待发布包列表
lerna publish       // 发布包

版本管理

lerna有两种版本号,集中版本号和独立版本号

fix(固定模式):包发布新版本的时候,发布的包会升级到lerna的version字段的版本,所以有些包可能会出现跳版本的情况,但是发布的时候打的tag只有一个。

independent(独立模式):包发布新版本的时候,会逐个询问需要升级的版本号,基准是它本身的package.json,就不会出现上面跳版本的问题,但是因为每次发布都会打tag,这样包的数量较多的时候,会出现一次发布5个包的话,会多5个tag

如果需要各个组件维护自身的版本号,那么就使用independent模式,只需要在lerna.json的version值改为 independent

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章