lerna用於管理多package
,且各package
可能會互相引用的項目。node
lerna
經過兩種方式管理子項目的版本號git
lerna publish
都會將所涉及到的包升級到最新一個版本,開發者只須要肯定發佈下一個version
。version
,每次執行lerna publish
都須要肯定每一個包的下個版本號。如下命令以yarn
爲主。github
yarn global add lerna
npm
lerna init
命令執行完畢後,會在生成對應的目錄結構。json
lerna-repo/
package.json
lerna.json
packages/
package-1/
package.json
package-2/
package.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/*"] } 複製代碼
lerna create <name>
建立一個子項目,並會根據交互提示生成對應的package.json
bootstrap
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=package2
markdown
lerna run <script> -- [..args]
oop
lerna run test
:則會執行全部子項目中的test
。lerna run --scope package1 test
:只執行package1
中的test
。lerna run --ignore package-* test
:只執行除了匹配package-*
外的項目中的test
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基於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" } } } 複製代碼
還沒有實踐過,具體還需參考README
lerna
的使用已介紹完畢,上述內容可知足平常開發需求,更多詳情還需參考官方文檔。