lerna 介紹
lerna 處理機構
固定模式(fixed)
所有包是統一的版本號,每次升級,所有包版本統一更新,不管這個包內容改變與否
具體體現在,lerna
的配置檔案 lerna.json
中永遠會存在一個確定版本號:
{
"version": "0.0.1"
}
典型例子: babel
、vue
獨立模式(independent)
每個包是單獨的版本號,每次lerna 觸發釋出命令,每個包的版本都會單獨變化
具體體現在,lerna
的配置檔案 lerna.json
中沒有一個確定版本號,而是:
{
"version": "independent"
}
lerna 安裝
npm install lerna -g
lerna -v
lerna 初始化
程式碼規範採用lerna
提供的規範結構的話:
# 預設固定模式
lerna init
# 要採用獨立模式的話
lerna init -i
# lerna init --independent
生成的程式碼結構
└── lerna/
├── packages/
├── lerna.json
└── package.json
如果程式碼已經存在,則只需要在專案下建立lerna.json
並補充相關欄位
{
"useWorkspaces": true, // 使用 workspaces 配置。此項為 true 的話,將使用 package.json 的 "workspaces",下面的 "packages" 欄位將不生效
"version": "0.1.0", // 所有包版本號,獨立模式-"independent"
"npmClient": "cnpm", // npm client,可設定為 cnpm、yarn 等
"packages": [ // 包所在目錄,可指定多個
"packages/*"
],
"command": { // lerna 命令相關配置
"publish": { // 釋出相關
"ignoreChanges": [ // 指定檔案或目錄的變更,不觸發 publish
".gitignore",
"*.log",
"*.md"
]
},
"bootstrap": { // bootstrap 相關
"ignore": "npm-*", // 不受 bootstrap 影響的包
"npmClientArgs": [ // bootstr 執行引數
"--no-package-lock"
]
}
}
}
lerna 相關命令
lerna官方文件https://lerna.js.org/
初始化
建立一個新的
lerna
倉庫或者將現有的倉庫使用lerna
管理
lerna init # -i/--independent
Publish
釋出包
lerna publish
Bootstrap
把所有包安裝到根
node_modules
lerna bootstrap
Run
執行每個包中的
script
命令
lerna run <script> --[...args]
Exe
單獨執行某個包下的
script
命令
lerna exec -- <command> [...args]
# example
$ lerna exec -- rm -rf ./node_modules
$ lerna exec -- protractor conf.js
Add
安裝本地或者遠端的包
lerna add <package>[@version] [--dev] [--exact] [--peer]
#--dev 將新包新增到devDependencies而不是dependencies.
#--exact 新增具有確切版本(例如1.0.1)而不是預設^semver 範圍(例如^1.0.1)的新包。
#--peer 將新包新增到peerDependencies而不是dependencies.
#將 module-1 包新增到 'prefix-' 字首資料夾中的包中
lerna add module-1 packages/prefix-*
#將模組 1 安裝到模組 2
lerna add module-1 --scope=module-2
#在 devDependencies 中將 module-1 安裝到 module-2
lerna add module-1 --scope=module-2 --dev
#在 peerDependencies 中安裝 module-1 到 module-2
lerna add module-1 --scope=module-2 --peer
#在除module-1之外的所有模組中安裝module-1
lerna add module-1
#在所有模組中安裝 babel-core
lerna add babel-core