@lerna/version(翻譯)

@lerna/version

自上次發佈以來包的Bump版本已更改git

使用

lerna version 1.0.1 # 明確的
lerna version patch # semver 關鍵字
lerna version       # 從提示中選擇
複製代碼

運行時,此命令執行如下操做:github

  • 標識自上一個標記版本以來已更新的包。shell

  • 提示輸入新版本。npm

  • 修改包元數據以反映新版本,在根目錄和每一個包中運行適當的生命週期腳本。json

  • 提交這些更改並標記提交。api

  • 推到git遠程。函數

Positionals

semver bump

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

  • --conventional-prerelease: 將當前更改發佈爲預發佈版本。
  • --conventional-graduate: 將預發佈版本包升級爲穩定版本。 運行 lerna version --conventional-commits沒有上述標誌的常規提交將只在版本已處於prerelease時將當前更改做爲prerelease發佈。

選項

--allow-branch

與啓用了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
複製代碼

--amend

lerna version --amend
# commit message is retained, and `git push` is skipped.
複製代碼

保留提交消息,並跳過「git push」。

使用此標誌運行時,lerna version將對當前提交執行全部更改,而不是添加新的更改。這在持續集成(CI)期間很是有用,能夠減小項目歷史記錄中的提交數量。

爲了防止意外的重寫,此命令將跳過git push(即,它意味着--no push)。

--changelog-preset

lerna version --conventional-commits --changelog-preset angular-bitbucket
複製代碼

默認狀況下,「變動日誌」預設設置爲「angular」。在某些狀況下,您可能須要更改使用其餘預設或自定義預設。

預設是常規變動日誌的內置或可安裝配置的名稱。預設能夠做爲軟件包的全名或自動擴展後綴(例如,angular擴展自conventional-changelog-angular)。

--conventional-commits

lerna version --conventional-commits
複製代碼

當使用此標誌運行時,lerna version將使用傳統的提交規範來肯定版本轉換和生成變動CHANGELOG.md 文件。

傳遞--no-changelog將禁用生成(或更新)CHANGELOG.md文件。

--conventional-graduate

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.

將不指定包的從屬項,但將不指定包的分級。

--conventional-prerelease

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版本。若是對未指定的包(若是指定包)或已在預發佈版中的包進行了更改,則這些包將按一般使用的常規提交進行版本控制。

--create-release

lerna version --conventional-commits --create-release github
lerna version --conventional-commits --create-release gitlab
複製代碼

使用此標誌運行時,lerna version將基於更改的包建立正式的GitHub或GitLab版本。須要--conventional-commits,以便生成變動日誌。

要使用GitHub進行身份驗證,能夠定義如下環境變量。

  • GH_TOKEN (required) - 您的GitHub身份驗證令牌(在「設置」>「開發人員設置」>「我的訪問令牌」下)。
  • GHE_API_URL -使用GitHub Enterprise時,API的絕對URL。
  • GHE_VERSION -使用GitHub Enterprise時,當前安裝的GHE版本。支持如下版本

要使用GitLab進行身份驗證,能夠定義如下環境變量。

  • GL_TOKEN (required) - 您的GitLab身份驗證令牌(在「用戶設置」>「訪問令牌」下)。
  • GL_API_URL - API的絕對URL,包括版本。(默認值:gitlab.com/api/v4)

注意:使用此選項時,不能傳遞--no changelog。

也能夠在中指定此選項lerna.json配置:

{
  "changelogPreset": "angular"
}
複製代碼

若是預置導出一個構建器函數(例如,conventional-changelog-conventionalcommits),您也能夠指定預置配置:

{
  "changelogPreset": {
    "name": "conventionalcommits",
    "issueUrlFormat": "{{host}}/{{owner}}/{{repository}}/issues/{{id}}"
  }
}
複製代碼

--exact

lerna version --exact
複製代碼

當使用此標誌運行時,lerna version將在更新的包中精確地指定更新的依賴項(沒有標點符號),而不是semver兼容(帶一個^)。

有關詳細信息,請參見package.json依賴關係文檔。

--force-publish

lerna version --force-publish=package-2,package-4

# 強制對全部包進行版本控制
lerna version --force-publish
複製代碼

使用此標誌運行時,lerna版本將強制發佈指定的包(逗號分隔)或使用*發佈全部包。

這將跳過對已更改包的lerna changed檢查,並強制更新沒有git diff更改的包。

--git-remote

lerna version --git-remote upstream
複製代碼

使用此標誌運行時,lerna version將把git更改推送到指定的遠程而不是源。

--ignore-changes

檢測更改的包時忽略與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等)。 二、包的一個或多個連接依賴項已更改。

--ignore-scripts

當傳遞此標誌時,此標誌將禁止在lerna version期間運行生命週期腳本。

--include-merged-tags

lerna version --include-merged-tags
複製代碼

在檢測更改的包時包括來自合併分支的標記。

--message

此選項別名爲-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"
    }
  }
}
複製代碼

--no-changelog

lerna version --conventional-commits --no-changelog
複製代碼

當使用 conventional-commits,不生成任何CHANGELOG.md文件

注意:使用此選項時,不能傳遞--create release。

--no-commit-hooks

默認狀況下,lerna version將容許git提交鉤子在提交版本更改時運行。傳遞 --no-commit-hooks用於禁用此行爲的提交鉤子。

這個選項相似於npm version選項 --commit-hooks鉤子,只是顛倒了一下。

--no-git-tag-version

默認狀況下,lerna version將提交對package.json文件並標記發佈。傳遞--no-git-tag-version來禁用該行爲。

這個選項相似於npm version選項--git-tag-version,只是顛倒了一下。

--no-granular-pathspec

默認狀況下,lerna version將git add在版本控制過程當中更改的葉包清單(可能還有changelogs)。這將產生至關於git add -- packages/*/package.json,但徹底適應了變化。

若是你知道你須要不一樣的行爲,你就會明白傳遞--no-granular-pathspec來讓git命令字面上是git add--。。經過選擇此路徑規範,必須正確忽略全部機密和生成輸出,不然將提交併推送。

在lerna.json中配置此選項最有意義,由於你真的不想把事情搞砸:

{
  "version": "independent",
  "granularPathspec": false
}
複製代碼

根級配置是有意的,由於這也包括了lerna publish中同名的選項。

--no-private

默認狀況下,在選擇版本、提交和標記發佈時,lerna version將包含私有包。--no-private來禁用此行爲。

請注意,此選項不排除私有範圍的包,只排除那些在其package.json文件 "private": true。

--no-push

默認狀況下,lerna version會將已提交和標記的更改推送到配置的git remote。--no-push以禁用此行爲。

--preid

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。

--sign-git-commit

此選項相似於同名的npm version選項。

--sign-git-tag

此選項相似於同名的npm version選項。

--force-git-tag

此選項將替換任何現有標記,而不是失敗。

--tag-version-prefix

此選項容許提供自定義前綴,而不是默認前綴:v。

請記住,當前必須提供兩次:對於version命令和publish命令:

# locally
lerna version --tag-version-prefix=''
# on ci
lerna publish from-git --tag-version-prefix=''
複製代碼

--yes

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值。

Lifecycle Scripts

// 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:

  • Detect changed packages, choose version bump(s)
  • Run preversion lifecycle in root
  • For each changed package, in topological order (all dependencies before dependents):
    • Run preversion lifecycle
    • Update version in package.json
    • Run version lifecycle
  • Run version lifecycle in root
  • Add changed files to index, if enabled
  • Create commit and tag(s), if enabled
  • For each changed package, in lexical order (alphabetical according to directory structure):
    • Run postversion lifecycle
  • Run postversion lifecycle in root
  • Push commit and tag(s) to remote, if enabled
  • Create release, if enabled
相關文章
相關標籤/搜索