monorepo
-
什麼是monorepo和multirepo
-
monorepo有啥優缺點
-
基於lerna實踐monorepo
-
構建
- bazel
- Rollup react
- Gulp babel
- MakeFile
Lerna
Lerna is a tool that optimizes the workflow around managing multi-package repositories with git and npm.
常用lerna命令
只介紹一些常用命令。詳細命令請查看lerna的readme文檔
-
lerna init
初始化monorepo項目,會新建
lerna.json
//默認是固定模式。 { "packages":["packages/*"], "version":"0.0.0" }
注意:如果想要使用獨立模式。
lerna init --independent
。則生成的lerna.json
中的version
字段爲independent
而不是0.0.0
-
發佈工作區中自上次發佈有更改的package。包的版本可以自定義,也可以根據一些條件自動生成。這裏我只介紹根據commit提交信息自動生成package版本,其它可以點擊鏈接查看詳情
-
lerna version --conventional-commits
按照常規提交規範自動生成package version。
fix
類型提交轉換爲PATCH
發行版。feat
類型提交轉換爲MINOR
發行版。BREAKING CHANGE
無論類型如何,提交中的提交都應轉換爲MAJOR
發行版。提示:不管是獨立還是固定模式,某個包變化。其它package依賴該包在發佈的時候都會更新version。只是兩個模式不同的是major的變化是否統一
注意: 在commir的footer中以
BREAKING CHANGE:
開頭就是重大更新一般package的格式是major.minor.patch組成。例子:1.0.0
- 默認模式:固定模式下 Fixed/Locked mode (default)
- 某個package有重大更新,工作區所有package都會增加一個major版本
- 獨立模式
- 默認模式:固定模式下 Fixed/Locked mode (default)
//lerna.json { "command":{ "version":{ //lerna version只能在master分支中使用 "allowBranch":["master"], //同lerna version -m "chore(release): publish %s"。默認lerna version生成的commit是沒有遵循conventional commit規範的。使用這個可以指定發佈的commitmsg "message": "chore(release): publish %s", //檢測更改的軟件包時,忽略與glob匹配的文件中的更改 "ignoreChanges":[ "*.md", "*.txt", //一些測試文件、和發佈無關的文件。。。 ] } } }
-
-
配合yarn workspace之後,一般使用
yarn install
代替lerna bootstrap
// lerna.json { "npmClient":"yarn", "useWorkspaces":true } //根目錄 package.json { "workspaces": [ "packages/*" ], }
-
在工作區中運行任意命令,使用
--
傳遞參數 -
運行工作區中某個script腳本(只針對具有這個script腳本的包執行),使用
--
傳遞參數 -
lerna import path --preserve-commit
將當前已有的庫添加到工作區裏面。會保留commit信息(包括原始提交人和作者)。不使用
--preserve-commit
則會導致提交人更改爲當前import的人。 -
如果是scope package(@xxx/some-package),則需要在
package
的package.json
指定publishConfig.access
字段//package的package.json文件 { "publishConfig":{ //指定範圍包的訪問權限 不設置public,就付錢升級npm賬號吧。 "access":"public", //指定發佈的目錄 可以配合.npmignore "directory":"" } }
需提前
npm login
,使用npm whoami
判斷是否登錄成功。沒問題使用lerna publish from-package
發佈包
Yarn workspace
yarn config list
中沒有設置workspaces-experimental則使用以下命令開啓
yarn config set workspaces-experimental true
使用yarn workspace主要是可以將各個package相同的包提升到根目錄中。避免每個package都install一個包。
使用工作區之後,package沒有自己的yarn.lock文件。所有packages共用根目錄的yarn.lock文件
常用命令
-
工作區
-
給某個package添加包
-
將
react
和react-dom
作爲devDependencies
加到packages/awesome-package/package.json
中yarn workspace awesome-package add react react-dom --dev
-
-
刪除某個package的某個包
-
從
packages/web-project/package.json
中移除some-package
yarn workspace web-project remove some-package --save
-
-
給所有package添加某個包
yarn workspace add some-package
lerna add package -
給所有package刪除某個包
yarn workspace remove some-package
-
-
根目錄
-
根目錄添加包
yarn add some-packeages -W
-
根目錄刪除包
yarn remove some-package -W
-