為什麼要用lerna 將大型代碼倉庫分割成多個獨立版本化的 軟體包(package)對於代碼共用來說非常有用。但是,如果某些更改 跨越了多個代碼倉庫的話將變得很 麻煩 並且難以跟蹤,並且, 跨越多個代碼倉庫的測試將迅速變得非常複雜。 為瞭解決這些(以及許多其它)問題,某些項目會將 代碼倉庫分割成多個 ...
為什麼要用lerna
將大型代碼倉庫分割成多個獨立版本化的 軟體包(package)對於代碼共用來說非常有用。但是,如果某些更改 跨越了多個代碼倉庫的話將變得很 麻煩 並且難以跟蹤,並且, 跨越多個代碼倉庫的測試將迅速變得非常複雜。
為瞭解決這些(以及許多其它)問題,某些項目會將 代碼倉庫分割成多個軟體包(package),並將每個軟體包存放到獨立的代碼倉庫中。但是,例如 Babel、 React、Angular、Ember、Meteor、Jest 等項目以及許多其他項目則是在 一個代碼倉庫中包含了多個軟體包(package)併進行開發。
Lerna 是一種工具,針對 使用 git 和 npm 管理多軟體包代碼倉庫的工作流程進行優化
npm初始化
新建文件夾spring-breeze,在集成終端輸入
npm init -y
根目錄會生成package.json:
{
"name": "spring-breeze",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
安裝lerna
全局安裝lerna
執行:npm i lerna -g
安裝完成後執行:lerna init
執行完成後後出現這樣的目錄結構
- packages(目錄)
- lerna.json(配置文件)
- package.json(工程描述文件)
初始化兩個package
預設情況下,package是放在packages目錄下的.創建包可以使用命令lerna create
[loc]
lerna create core packages/core
lerna create core packages/tools
將packages/core/lib/core.js改為:
'use strict';
console.log("我是core包~~")
將packages/tools/lib/tools.js改為:
'use strict';
console.log("我是tools包~~")
此時目錄結構為
-- packages(目錄)
-- core
...
-- lib
-- core.js
-- package.json
-- README.md
- tools
...
-- lib
-- tools.js
-- package.json
-- README.md
- lerna.json(配置文件)
- package.json(工程描述文件)
...
修改包名
為了防止重名,包名一般改為@組織/包,如現在這個項目core應該改為:@spring-breeze/core;tools改為:@spring-breeze/tools
例如core模塊:
- packages/core/package.json:
{
"name": "@spring-breeze/core",
"version": "0.0.1",
"description": "> TODO: description",
"author": "******",
"homepage": "",
"license": "ISC",
"main": "lib/core.js",
"directories": {
"lib": "lib",
"test": "__tests__"
},
"files": [
"lib"
],
"repository": {
"type": "git",
"url": "******"
},
"scripts": {
"test": "echo \"Error: run tests from root\" && exit 1"
}
}
安裝第三方包lerna add
-
添加公共依賴
在根目錄下執行(在哪個目錄執行都一樣):lerna add lodash
此時會發現core和tools都被安裝了lodash -
添加單獨依賴
lerna add jquery --scope=core
core就會被安裝了jquery
刪除依賴lerna clean
執行lerna clean會刪除所有包中的node_modules
安裝所有依賴lerna bootstrap
執行lerna bootstrap會重新安裝所有依賴
測試本地包
如果本地開發的兩個包有所關聯,用lerna進行調試非常的簡單,只需要將需要用的本地包版本號寫入依賴執行:lerna link就可以了;例如在core模塊使用tools模塊
- package添加依賴:"@spring-breeze/tools": "^0.0.1"
{
"name": "@spring-breeze/core",
"version": "0.0.1",
"description": "> TODO: description",
"author": "******",
"homepage": "",
"license": "ISC",
"main": "lib/core.js",
"directories": {
"lib": "lib",
"test": "__tests__"
},
"files": [
"lib"
],
"repository": {
"type": "git",
"url": "******"
},
"dependencies": {
"@spring-breeze/tools": "^0.0.1"
},
"scripts": {
"test": "echo \"Error: run tests from root\" && exit 1"
}
}
添加完成之後執行lerna link
- core中使用:packages/core/lib/core.js
'use strict';
require("@spring-breeze/tools")
node執行core.js就會發現控制台列印:我是tools包~~。這樣就可以進行本地的調試了
發佈前準備
調試完成就可以發佈了,發佈流程如下:
- 註冊npm賬戶
- 新建組織spring-breeze(根據自己項目而定)
- 執行npm login
- 分別在core和utils下的package.json中配置
"publishConfig": {
"access": "public"
}
- 新建gitignore
*node_modules
- 新建git倉庫,將項目git remote add "你的git倉庫",並且提交項目至git倉庫
git remote add https://gitee.com/geeksdidi/spring-breeze.git
git add .
git commit -m "初始化"
git push -u origin master
- 新建LICENSE.md(可以是空文件)
- 修改一個文件執行 lerna publish
註意:每次發佈新版本之前都有將代碼提交到git上
查看已發佈的package
登陸npm官網 即可看到自己發佈的package