lerna以及lerna-changelog使用
lerna
用於管理多package
,且各package
可能會互相引用的專案。
lerna
通過兩種方式管理子專案的版本號
-
Fixed/Locked mode (default):每次執行
lerna publish
都會將所涉及到的包升級到最新一個版本,開發者只需要確定釋出下一個version
。 -
Independent mode:由開發者自行管理子專案的
version
,每次執行lerna publish
都需要確定每個包的下個版本號。
基本使用
以下命令以yarn
為主。
Install 安裝
yarn global add lerna
Init 初始化專案
lerna init
命令執行完畢後,會在生成對應的目錄結構。
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.json
Add 新增依賴
lerna add <package>[@version] [--dev] [--exact]
-
lerna add eslint
: 所有包都會裝上eslint
。 -
lerna add eslint --scope=package1
:只有package1
會裝上。 -
lerna add eslint packages/prefix-*
:符合prefix
的包會裝上。
options:
-
-dev
:新增到devDependencies
-
--exact
: 只安裝特定版本
如果新增的是子專案,則會通過link
軟連線到對應的專案中。lerna add package1 --scope=package2
Run 執行npm script命令
lerna run <script> -- [..args]
-
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 prepublish
和npm 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
。 -
將新分支
push
到remote
端。 -
建立
pr
,並打上label
,此處一定要打上label
,learn-changelog
就是根據label
來確定該pr
屬於feature
/bugfix
/document
等。 -
切記要在
merge
之前打上label
。 -
進行
merge pr
操作。 -
本地切換到
master
分支並進行pull
操作。 -
執行
lerna-changelog
,既可得到一份changeling
。
注意
pr
的label
並不能隨意設定,一定要在專案中宣告對應才生效。
官方預設支援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" } } } 複製程式碼