自上次發佈以來包的Bump版本已更改git
lerna version 1.0.1 # 明確的
lerna version patch # semver 關鍵字
lerna version # 從提示中選擇
複製代碼
運行時,此命令執行如下操做:github
標識自上一個標記版本以來已更新的包。shell
提示輸入新版本。npm
修改包元數據以反映新版本,在根目錄和每一個包中運行適當的生命週期腳本。json
提交這些更改並標記提交。api
推到git遠程。函數
lerna version [major | minor | patch | premajor | preminor | prepatch | prerelease]
# 使用下一個語義版本值,這將跳過「爲…」選擇新版本的提示
複製代碼
當傳遞此位置參數時,lerna version將跳過版本選擇提示並按該關鍵字遞增版本。您仍然必須使用--yes標誌來避免全部提示。oop
若是您有任何具備預發佈版本號的包(例如2.0.0-beta.3),而且您運行帶有和非預發佈bump(major、minor或patch)的lerna version,它將發佈那些先前預發佈的包以及自上一個版本以來更改的包。gitlab
對於使用常規提交的項目,請使用如下標誌進行預發佈管理:post
與啓用了lerna version的git分支相匹配的globs的白名單。在lerna.json中進行配置是最簡單的(也是推薦的),但也能夠做爲CLI選項傳遞。
{
"command": {
"version": {
"allowBranch": "master"
}
}
}
複製代碼
使用上面的配置,當從master節點之外的任何分支運行lerna version時,將失敗。將lerna version僅限於master分支被認爲是一種最佳實踐。
{
"command": {
"version": {
"allowBranch": ["master", "feature/*"]
}
}
}
複製代碼
在前面的配置中,任何前綴爲feature/的分支都容許使用lerna version。請注意,當分支合併到主分支時,在功能分支中生成git標記充滿了潛在的錯誤。若是標記與它們的原始上下文「分離」(可能經過壓縮合並或衝突合併提交),那麼之後的lerna version執行將很難肯定正確的「自上次發佈以來的差別」
老是能夠在命令行上重寫這個「持久」配置。請謹慎使用。
lerna version --allow-branch hotfix/oops-fix-the-thing
複製代碼
lerna version --amend
# commit message is retained, and `git push` is skipped.
複製代碼
保留提交消息,並跳過「git push」。
使用此標誌運行時,lerna version將對當前提交執行全部更改,而不是添加新的更改。這在持續集成(CI)期間很是有用,能夠減小項目歷史記錄中的提交數量。
爲了防止意外的重寫,此命令將跳過git push(即,它意味着--no push)。
lerna version --conventional-commits --changelog-preset angular-bitbucket
複製代碼
默認狀況下,「變動日誌」預設設置爲「angular」。在某些狀況下,您可能須要更改使用其餘預設或自定義預設。
預設是常規變動日誌的內置或可安裝配置的名稱。預設能夠做爲軟件包的全名或自動擴展後綴(例如,angular擴展自conventional-changelog-angular)。
lerna version --conventional-commits
複製代碼
當使用此標誌運行時,lerna version將使用傳統的提交規範來肯定版本轉換和生成變動CHANGELOG.md 文件。
傳遞--no-changelog將禁用生成(或更新)CHANGELOG.md文件。
lerna version --conventional-commits --conventional-graduate=package-2,package-4
# 強制全部預發佈包分級
lerna version --conventional-commits --conventional-graduate
複製代碼
使用此標誌運行時,lerna version將使用*對指定的包(逗號分隔)或全部包進行分級。不管當前頭是否已釋放,此命令均可以工做,相似於--force publish,只是忽略了任何非預發佈的包。若是對未指定的包(若是指定包)或不在預發行版中的包進行了更改,則這些包將按一般使用的常規提交進行版本控制。
「Graduating」一個包意味着碰到了預發佈版本的非預發佈版本,例如。package-1@1.0.0-alpha.0 => package-1@1.0.0.
將不指定包的從屬項,但將不指定包的分級。
lerna version --conventional-commits --conventional-prerelease=package-2,package-4
# 強制預發佈全部更改的包
lerna version --conventional-commits --conventional-prerelease
複製代碼
使用此標誌運行時,lerna version將使用預發佈版本發佈指定的包(逗號分隔)或使用*的全部包。將全部未發佈的更改做爲pre(patch/minor/major/release),方法是在常規提交的版本建議前面加上pre,例如,若是當前的更改包含功能提交,則建議的bump將是minor,所以此標誌將致使preminor版本。若是對未指定的包(若是指定包)或已在預發佈版中的包進行了更改,則這些包將按一般使用的常規提交進行版本控制。
lerna version --conventional-commits --create-release github
lerna version --conventional-commits --create-release gitlab
複製代碼
使用此標誌運行時,lerna version將基於更改的包建立正式的GitHub或GitLab版本。須要--conventional-commits,以便生成變動日誌。
要使用GitHub進行身份驗證,能夠定義如下環境變量。
要使用GitLab進行身份驗證,能夠定義如下環境變量。
注意:使用此選項時,不能傳遞--no changelog。
也能夠在中指定此選項lerna.json配置:
{
"changelogPreset": "angular"
}
複製代碼
若是預置導出一個構建器函數(例如,conventional-changelog-conventionalcommits),您也能夠指定預置配置:
{
"changelogPreset": {
"name": "conventionalcommits",
"issueUrlFormat": "{{host}}/{{owner}}/{{repository}}/issues/{{id}}"
}
}
複製代碼
lerna version --exact
複製代碼
當使用此標誌運行時,lerna version將在更新的包中精確地指定更新的依賴項(沒有標點符號),而不是semver兼容(帶一個^)。
有關詳細信息,請參見package.json依賴關係文檔。
lerna version --force-publish=package-2,package-4
# 強制對全部包進行版本控制
lerna version --force-publish
複製代碼
使用此標誌運行時,lerna版本將強制發佈指定的包(逗號分隔)或使用*發佈全部包。
這將跳過對已更改包的lerna changed檢查,並強制更新沒有git diff更改的包。
lerna version --git-remote upstream
複製代碼
使用此標誌運行時,lerna version將把git更改推送到指定的遠程而不是源。
檢測更改的包時忽略與glob匹配的文件中的更改。
lerna version --ignore-changes '**/*.md' '**/__tests__/**'
複製代碼
此選項最好指定爲root lerna .json配置,以免過早對globs進行shell評估,並與lerna diff和lerna changed共享配置:
{
"ignoreChanges": ["**/__fixtures__/**", "**/__tests__/**", "**/*.md"]
}
複製代碼
傳遞 --no-ignore-changes以禁用任何現有的持久性配置。
在如下狀況下,不管此選項如何,都將始終發佈包: 一、該包的最新版本是預發佈版本(即1.0.0-alpha、1.0.0-0.3.7等)。 二、包的一個或多個連接依賴項已更改。
當傳遞此標誌時,此標誌將禁止在lerna version期間運行生命週期腳本。
lerna version --include-merged-tags
複製代碼
在檢測更改的包時包括來自合併分支的標記。
此選項別名爲-m以與git commit進行奇偶校驗。
lerna version -m "chore(release): publish %s"
# commit message = "chore(release): publish v1.0.0"
lerna version -m "chore(release): publish %v"
# commit message = "chore(release): publish 1.0.0"
# 獨立地對包進行版本控制時,不會替換佔位符
lerna version -m "chore(release): publish"
# commit message = "chore(release): publish
#
# - package-1@3.0.1
# - package-2@1.5.4"
複製代碼
使用此標誌運行時,lerna version在提交發布的版本更新時將使用提供的消息。對於將lerna集成到但願提交消息遵循某些準則的項目中很是有用,例如使用commitizen和/或語義發佈的項目。
若是信息包含%s,它將被替換爲前綴爲「v」的新的全局版本號。若是信息包含%v,它將被替換爲不帶前導「v」的新全局版本號。請注意,此佔位符插值僅適用於使用默認的「固定」版本控制模式時,由於在獨立進行版本控制時沒有要插入的「全局」版本。
能夠在lerna.json中配置,以及:
{
"command": {
"version": {
"message": "chore(release): publish %s"
}
}
}
複製代碼
lerna version --conventional-commits --no-changelog
複製代碼
當使用 conventional-commits,不生成任何CHANGELOG.md文件
注意:使用此選項時,不能傳遞--create release。
默認狀況下,lerna version將容許git提交鉤子在提交版本更改時運行。傳遞 --no-commit-hooks用於禁用此行爲的提交鉤子。
這個選項相似於npm version選項 --commit-hooks鉤子,只是顛倒了一下。
默認狀況下,lerna version將提交對package.json文件並標記發佈。傳遞--no-git-tag-version來禁用該行爲。
這個選項相似於npm version選項--git-tag-version,只是顛倒了一下。
默認狀況下,lerna version將git add在版本控制過程當中更改的葉包清單(可能還有changelogs)。這將產生至關於git add -- packages/*/package.json,但徹底適應了變化。
若是你知道你須要不一樣的行爲,你就會明白傳遞--no-granular-pathspec來讓git命令字面上是git add--。。經過選擇此路徑規範,必須正確忽略全部機密和生成輸出,不然將提交併推送。
在lerna.json中配置此選項最有意義,由於你真的不想把事情搞砸:
{
"version": "independent",
"granularPathspec": false
}
複製代碼
根級配置是有意的,由於這也包括了lerna publish中同名的選項。
默認狀況下,在選擇版本、提交和標記發佈時,lerna version將包含私有包。--no-private來禁用此行爲。
請注意,此選項不排除私有範圍的包,只排除那些在其package.json文件 "private": true。
默認狀況下,lerna version會將已提交和標記的更改推送到配置的git remote。--no-push以禁用此行爲。
lerna version prerelease
# 使用下一個語義預發佈版本,例如。
# 1.0.0 => 1.0.1-alpha.0
lerna version prepatch --preid next
# 使用具備特定預發佈標識符的下一個語義預發佈版本,例如。
# 1.0.0 => 1.0.1-next.0
複製代碼
使用此標誌運行時,lerna version將使用指定的prerelease標識符增長prejor、preminor、prepatch或prerelease semver bumps。
此選項相似於同名的npm version選項。
此選項相似於同名的npm version選項。
此選項將替換任何現有標記,而不是失敗。
此選項容許提供自定義前綴,而不是默認前綴:v。
請記住,當前必須提供兩次:對於version命令和publish命令:
# locally
lerna version --tag-version-prefix=''
# on ci
lerna publish from-git --tag-version-prefix=''
複製代碼
lerna version --yes
# skips `Are you sure you want to publish these packages?`
複製代碼
使用此標誌運行時,lerna版本將跳過全部確認提示。在連續集成(CI)中很是有用,可自動響應發佈確認提示。
若是在monorepo激活一段時間後開始使用--conditional commits選項,那麼仍然可使用傳統的changelog cli和lerna exec爲之前的版本生成變動日誌:
# Lerna實際上並不使用傳統的changelog cli,所以您須要臨時安裝它
npm i -D conventional-changelog-cli
# Documentatiional-on: `npx conventchangelog --help`
# fixed versioning (default)
# run in root, then leaves
npx conventional-changelog --preset angular --release-count 0 --outfile ./CHANGELOG.md --verbose
npx lerna exec --concurrency 1 --stream -- 'conventional-changelog --preset angular --release-count 0 --commit-path $PWD --pkg $PWD/package.json --outfile $PWD/CHANGELOG.md --verbose'
# independent versioning
# (no root changelog)
npx lerna exec --concurrency 1 --stream -- 'conventional-changelog --preset angular --release-count 0 --commit-path $PWD --pkg $PWD/package.json --outfile $PWD/CHANGELOG.md --verbose --lerna-package $LERNA_PACKAGE_NAME'
複製代碼
若是使用自定義--changelog預置,則應該在上面的示例中相應地更改--preset值。
// preversion: Run BEFORE bumping the package version.
// version: Run AFTER bumping the package version, but BEFORE commit.
// postversion: Run AFTER bumping the package version, and AFTER commit.
複製代碼
Lerna will run npm lifecycle scripts during lerna version in the following order: