lerna对于多包版本管理初步使用

@kvkens 2019-01-04 04:02:15发表于 iuap-design/blog

lerna对于多包版本管理初步使用

更多文档访问 https://lernajs.io/

安装

  1. 使用npm安装全局lerna
$ npm install --global lerna
  1. 确认安装是否成功运行:
$ lerna --version

输出版本号正确安装:

3.8.4

初始化

  1. 创建文件夹
$ mkdir pkg && cd pkg
  1. 初始化lerna资源目录
$ lerna init

之后我们查看一下具体目录结构:

.
├── lerna.json
├── package.json
└── packages

1 directory, 2 files

默认情况下,packages/下即保存多包地址

管理模式

  1. 使用lerna管理项目时,可以选择两种模式。
  2. 默认的为固定模式(Fixed mode)
    • 当使用lerna init命令初始化项目时,就默认为固定模式,也可以使用 lerna init --independent 命令初始化项目,这个时候就为独立模式(Independent mode)。
      固定模式中,packages下的所有包共用一个版本号(version),会自动将所有的包绑定到一个版本号上(该版本号也就是lerna.json中的version字段),所以任意一个包发生了更新,这个共用的版本号就会发生改变。
  3. 独立模式允许每一个包有一个独立的版本号
    • 在使用lerna publish命令时,可以为每个包单独制定具体的操作,同时可以只更新某一个包的版本号。此种模式时,lerna.json中的version字段指定为independent即可

这里我们使用默认的固定模式

常用命令

  1. 启动

    • lerna bootstrap

    切记使用这个指令代替 npm install。默认使用npm安装,如果需要使用yarn或者cnpm可参考后面教程
    这个指令会执行以下操作:

    • 在每个 package 下面执行 npm install
    • 根据各个 package 下 package.json 里面的 dependencies 和 devDependencies 配置,使用 symlink 在各个 package 的 node_modules 下面建立引用关系
    • 在每个 package 下执行 npm run prepublish
    • 在每个 package 下执行 npm run prepare
  2. 添加依赖

    • lerna add react

    添加react到所有packages里面的包

    • lerna add react-dom --scope=uba-lerna

    指定uba-lerna包安装react-dom

    • lerna add package-2 --scope=package-1

    该命令会在package-1下安装package-2

从上面的三个实例看出,使用lerna add 可以指定为某一个或所有的包安装依赖,依赖可以为外部(通过npm install的方式),也可以为内部(即packages文件夹下的包),同时当指定的内部依赖版本号跟目标版本号不匹配时,将使用npm install的方式来安装外部依赖

  1. 发布
    • lerna publish 用于发布更新,默认发到npm上
  • 运行lerna updated来决定哪一个包需要被publish
  • 如果有必要,将会更新lerna.json中的version
  • 将所有更新过的的包中的package.json的version字段更新
  • 将所有更新过的包中的依赖更新
  • 为新版本创建一个git commit或tag
  • 将包publish到npm上
  1. 其他
  • lerna updated,lerna diff 对包是否发生过变更

  • lerna ls 显示packages下的各个package的version

  • lerna clean 清理node_modules

  • lerna run 运行npm script,可以指定具体的package