lerna以及lerna-changelog使用

lerna用於管理多package,且各package可能會互相引用的項目。node

lerna經過兩種方式管理子項目的版本號git

  • Fixed/Locked mode (default):每次執行lerna publish都會將所涉及到的包升級到最新一個版本,開發者只須要肯定發佈下一個version
  • Independent mode:由開發者自行管理子項目的version,每次執行lerna publish都須要肯定每一個包的下個版本號。

基本使用

如下命令以yarn爲主。github

Install 安裝

yarn global add lernanpm

Init 初始化項目

lerna init 命令執行完畢後,會在生成對應的目錄結構。json

lerna-repo/
  package.json
  lerna.json
  packages/
    package-1/
      package.json
    package-2/
      package.json
複製代碼

Lerna.json 配置

{
  "version": "1.1.3", // 項目版本
  "npmClient": "npm", // 默認使用的npm,可改成yarn
  "command": { // lerna 內置命令的配置
    "publish": {
      "ignoreChanges": ["*.md", "**/test/**",], // 發佈時忽略部分文件的改動,配置此項能夠減小沒必要要的publish。
      "message": "chore(release): publish" // git commit message
    },
  },
  "packages": ["packages/*"]
}
複製代碼

Create 建立子項目

lerna create <name> 建立一個子項目,並會根據交互提示生成對應的package.jsonbootstrap

Add 添加依賴

lerna add <package>[@version] [--dev] [--exact]bash

  • lerna add eslint: 全部包都會裝上eslint
  • lerna add eslint --scope=package1:只有package1會裝上。
  • lerna add eslint packages/prefix-*:符合prefix的包會裝上。

options:babel

  • -dev:添加到devDependencies
  • --exact: 只安裝特定版本

若是添加的是子項目,則會經過link軟鏈接到對應的項目中。 lerna add package1 --scope=package2markdown

Run 執行npm script命令

lerna run <script> -- [..args]oop

  • lerna run test:則會執行全部子項目中的test
  • lerna run --scope package1 test:只執行package1中的test
  • lerna run --ignore package-* test:只執行除了匹配package-*外的項目中的test

Exec 執行任意命令

lerna exec -- <command> [..args]

lerna run相似,只不過它能夠執行任意命令。 eg: lerna exec -- rm -rf ./node_modules

其餘命令

  • lerna bootstrap:安裝各子項目依賴,對相互引用的項目進行軟鏈接,在子項目中執行npm run prepublishnpm run prepare
    • --hoist [glob]:會將子項目的匹配的依賴(eg:eslint, jest等),統一放在根目錄的node_modules中,減小安裝時間,但僅限npmClient=npm
    • —nohoist [glob]: 匹配的依賴(eg: babel)會安裝到子項目中的node_modules
  • lerna clean:刪除子項目的node_modules
  • lerna link:同bootstrap第二步。

進階使用

Lerna-changelog

lerna-changelog基於pr來爲項目生成changelog

可參考repo

使用步驟
  • master分支切換出feature/bugfix等分支,參考git-flow
  • 完成開發後進行commit,推薦使用commitizen來規範commit msg,同時有助於對後續子項目生成changelog
  • 將新分支pushremote端。
  • 建立pr,並打上label,此處必定要打上labellearn-changelog就是根據label來肯定該pr屬於feature/bugfix/document等。
  • 切記要在merge以前打上label
  • 進行merge pr操做。
  • 本地切換到master分支並進行pull操做。
  • 執行lerna-changelog,既可獲得一份changeling
注意

prlabel並不能隨意設置,必定要在項目中聲明對應才生效。

官方默認支持breaking/enhancement/bug/documentation/internal,若是想用其餘,則須要在package.json中進行相應的配置。

{
  "changelog": {
    "labels": {
      "feat": ":rocket: New Feature",
      "bug": ":bug: Bug Fix",
      "doc": ":memo: Documentation",
      "internal": ":house: Internal",
      "breaking": ":boom: Breaking Change"
    }
  }
}
複製代碼

子項目的changelog

還沒有實踐過,具體還需參考README

結語

lerna的使用已介紹完畢,上述內容可知足平常開發需求,更多詳情還需參考官方文檔。

相關文章
相關標籤/搜索