国产成人精品999视频&日本一区二区亚洲人妻精品&久久久精品国产99久久精&99热这里只有成人精品国产&精品国产剧情av一区二区&成人亚洲精品久久久久app&国产精品美女高潮抽搐A片

Lerna 備忘清單

NPM version Downloads Repo Dependents Github repo

本備忘單旨在快速理解 Lerna v6 所涉及的主要概念,顯示了它的常用命令使用清單

入門

介紹

現(xiàn)代構(gòu)建系統(tǒng),用于管理和發(fā)布來(lái)自同一存儲(chǔ)庫(kù)的多個(gè) JavaScript/TypeScript 包。

$ npx lerna@latest init

下面是示例目錄結(jié)構(gòu)

├── README.md
├── remixapp   # web 應(yīng)用 (remixapp)
│?? ├── src
│?? └── package.json
├── packages
│?? ├── footer # 組件(@remixapp/footer)
│   │?? ├── src
│   │?? └── package.json
│   │
│?? └── header # 組件(@remixapp/header)
│    ?? ├── src
│    ?? └── package.json
├── lerna.json
└── package.json

引導(dǎo)程序 (Bootstrap)

它在 package.json 中依賴于它們,如下所示:

"dependencies": {
  // ....
  "@remixapp/header": "*",
  "@remixapp/footer": "*"
}

remixapp 應(yīng)用程序?qū)?code>頁(yè)眉和頁(yè)腳庫(kù),如下所示:

import { Header } from "header";
import { Footer } from "footer";

export default function Home() {
  return (
    <>
      <Header />
      <div>Content!</div>
      <Footer />
    </>
  );
}

useWorkspaces

{
  "$schema": "node_modules/lerna/schemas/lerna-schema.json",
  "useWorkspaces": true,
  "version": "0.0.0"
}

lerna.json 中配置 useWorkspaces 告訴 Lerna 將包鏈接過(guò)程委托給你的包管理器 (此功能由 npm、yarn 和 pnpm 支持)。

任務(wù)運(yùn)行

npx lerna run test --scope=header # 單個(gè)

多個(gè)任務(wù)運(yùn)行

npx lerna run test --scope=header,footer

忽略 header,footer 其它包中運(yùn)行任務(wù)運(yùn)行

npx lerna run build --ignore=header,footer

命令索引

run/exec 運(yùn)行命令

# 在所有包含它的包中運(yùn)行 npm run my-script
$ lerna run <script> -- [..args]
$ lerna run test
$ lerna run build

# 觀看所有包并在更改時(shí)轉(zhuǎn)換,流式前綴輸出
$ lerna run --parallel watch

# 在所有包中運(yùn)行命令
$ lerna exec -- <command> [..args]
$ lerna exec -- rm -rf ./node_modules
$ lerna exec -- protractor conf.js

:-:-
--npm-client <client> #必須是知道如何運(yùn)行 npm 生命周期腳本的可執(zhí)行文件,默認(rèn)值是 npm
--stream #立即從子進(jìn)程流式輸出,以原始包名稱為前綴
--parallel #類似于 --stream 但完全忽略并發(fā)和拓?fù)渑判?,立即在所有匹配的包中運(yùn)行給定的命令或腳本,并帶有前綴流輸出
--no-bail #默認(rèn)情況下,如果任何腳本運(yùn)行返回非零退出代碼,lerna run 將退出并出現(xiàn)錯(cuò)誤。傳遞 --no-bail 以禁用此行為
--no-prefix #當(dāng)輸出為流式傳輸(--stream--parallel)時(shí)禁用包名稱前綴。當(dāng)將結(jié)果傳送到其他進(jìn)程(例如編輯器插件)時(shí),此選項(xiàng)很有用
--profile #分析腳本執(zhí)行并生成性能配置文件
--profile-location <location> #您可以為性能配置文件輸出提供自定義位置。提供的路徑將相對(duì)于當(dāng)前工作目錄進(jìn)行解析。
useNx=false #通過(guò)將 useNx 設(shè)置為 false,您可以使用 lerna 中的遺留任務(wù)運(yùn)行實(shí)現(xiàn) (p-mapp-queue),而不是使用由 Nx 提供支持的默認(rèn)現(xiàn)代任務(wù)運(yùn)行器實(shí)現(xiàn)。

publish 發(fā)布包

# 發(fā)布自上次發(fā)布以來(lái)已更改的軟件包
$ lerna publish              
# 顯式發(fā)布在當(dāng)前提交中標(biāo)記的包
$ lerna publish from-git     
# 顯式發(fā)布注冊(cè)表中不存在最新版本的軟件包
$ lerna publish from-package
# 使用下一個(gè)語(yǔ)義預(yù)發(fā)布版本,例如
$ lerna publish --canary
# 1.0.0 => 1.0.1-alpha.0+${SHA}
# 自上次提交以來(lái)更改的包
# 隨后的金絲雀發(fā)布將產(chǎn)生1.0.1-alpha.1+${SHA}等

$ lerna publish --canary --preid beta
# 1.0.0 => 1.0.1-beta.0+${SHA}

# 以下是等價(jià)的:
$ lerna publish --canary minor
$ lerna publish --canary preminor
# 1.0.0 => 1.1.0-alpha.0+${SHA}

:-:-
--canary #使用此標(biāo)志運(yùn)行時(shí),以更精細(xì)的方式(每次提交)發(fā)布包
--contents <dir> #要發(fā)布的子目錄。 必須適用于所有包,并且必須包含 package.json 文件
--dist-tag <tag> #使用此標(biāo)志運(yùn)行時(shí),將使用給定的 npm dist-tag(默認(rèn)為 latest)發(fā)布到 npm
--git-head <sha> #打包 tarball 時(shí)將顯式 SHA 設(shè)置為清單上的 gitHead,僅允許使用 from-package 位置
--graph-type <all|dependencies> #設(shè)置在構(gòu)建包圖時(shí)使用哪種依賴項(xiàng)。默認(rèn)值是依賴項(xiàng),即僅包含包的 package.json 的依賴項(xiàng)部分中列出的包
--ignore-scripts #傳遞時(shí),此標(biāo)志將在 lerna 發(fā)布期間禁用運(yùn)行生命周期腳本
--ignore-prepublish #傳遞時(shí),此標(biāo)志將禁用在 lerna 發(fā)布期間運(yùn)行已棄用預(yù)發(fā)布腳本
--legacy-auth #發(fā)布需要身份驗(yàn)證的包時(shí),您正在使用僅使用舊版 Base64 用戶名:密碼 的內(nèi)部托管 NPM 注冊(cè)表。這與 NPM 發(fā)布 _auth 標(biāo)志相同
--no-git-reset #默認(rèn)情況下,lerna publish 確保對(duì)工作樹(shù)的任何更改都已重置
--no-granular-pathspec #默認(rèn)情況下,lerna publish 將嘗試(如果啟用)git checkout 僅在發(fā)布過(guò)程中臨時(shí)修改的葉包清單
--verify-access #從歷史上看,lerna 試圖通過(guò)使用給定令牌執(zhí)行一些搶占式 npm API 請(qǐng)求來(lái)快速解決授權(quán)/身份驗(yàn)證問(wèn)題
--otp #發(fā)布需要雙重身份驗(yàn)證的包時(shí),您可以使用 --otp 指定一次性密碼
--preid #與同名的 lerna 版本選項(xiàng)不同,該選項(xiàng)只適用于 --canary 版本計(jì)算
--pre-dist-tag <tag> #--dist-tag 的工作方式相同,但僅適用于使用預(yù)發(fā)布版本發(fā)布的軟件包
--registry <url> #使用此標(biāo)志運(yùn)行時(shí),轉(zhuǎn)發(fā)的 npm 命令將為您的包使用指定的注冊(cè)表
--tag-version-prefix #此選項(xiàng)允許提供自定義前綴而不是默認(rèn)前綴:v
--temp-tag #傳遞時(shí),此標(biāo)志將更改默認(rèn)發(fā)布過(guò)程,首先將所有更改的包發(fā)布到臨時(shí) dist-tag(lerna-temp),然后將新版本移動(dòng)到 --dist-tag 配置的 dist-tag (默認(rèn)latest)
--yes #使用此標(biāo)志運(yùn)行時(shí),lerna publish 將跳過(guò)所有確認(rèn)提示

不推薦使用的選項(xiàng)

:-:-
--no-verify-access #舊的搶先訪問(wèn)驗(yàn)證現(xiàn)在默認(rèn)關(guān)閉,因此不需要 --no-verify-access
--skip-npm #直接調(diào)用 lerna version

每個(gè)包中的配置

"publishConfig": {
  "access": "public",
  "registry": "http://my-registry.com",
  "tag": "flippin-sweet",
  "directory": "dist"
}

:-:-
access #要發(fā)布具有范圍的包(例如,@mycompany/rocks)
registry #通過(guò)設(shè)置注冊(cè)表來(lái)自定義每個(gè)包的注冊(cè)表
tag #您可以通過(guò)設(shè)置標(biāo)簽來(lái)自定義每個(gè)包的 dist-tag
directory #這個(gè) 非標(biāo)準(zhǔn) 字段允許您像 --contents 一樣自定義發(fā)布的子目錄,但基于每個(gè)包

version 修改版本號(hào)

$ lerna version 1.0.1 # 明確的
$ lerna version patch # semver 關(guān)鍵字
$ lerna version       # 從提示中選擇

$ lerna version [major | minor | ...]
# 使用下一個(gè)語(yǔ)義版本值
# 這會(huì)跳過(guò)“為...選擇新版本”提示
# 強(qiáng)制所有包版本化
$ lerna version --force-publish
$ lerna version -m "chore(doc): publish %s"
# 提交消息 = "chore(doc): publish v1.0.0"
$ lerna version -m "chore(doc): publish %v"
# 提交消息 = "chore(doc): publish 1.0.0"

  • major 重大的
  • minor 次要的
  • patch 修補(bǔ)
  • premajor 主要的
  • preminor 初級(jí)
  • prepatch 預(yù)補(bǔ)丁
  • prerelease 預(yù)發(fā)行

:-:-
--allow-branch <glob> #與啟用 lerna versiongit 分支匹配的 glob 白名單
--amend #使用此標(biāo)志運(yùn)行時(shí),lerna version 將在當(dāng)前提交上執(zhí)行所有更改,而不是添加新的
--changelog-preset #默認(rèn)情況下,更改日志預(yù)設(shè)設(shè)置為 angular
--conventional-commits #使用常規(guī)提交規(guī)范來(lái)確定版本 bump 并生成 CHANGELOG.md 文件
--conventional-graduate #將使用 * 對(duì)指定的包(逗號(hào)分隔)或所有包進(jìn)行分級(jí)
--conventional-prerelease #預(yù)發(fā)布版本發(fā)布指定的包
--create-release <type> #根據(jù)更改的包創(chuàng)建正式的 GitHubGitLab 版本
--exact #在更新的包中精確指定更新的依賴項(xiàng)(沒(méi)有標(biāo)點(diǎn)符號(hào)),而不是與 semver 兼容(使用^
--force-publish #強(qiáng)制發(fā)布指定的包
--git-remote <name> #git 更改推送到指定的遠(yuǎn)程位置,而不是origin
--ignore-changes #檢測(cè)更改的包時(shí)忽略與 glob 匹配的文件中的更改
--ignore-scripts #禁用在 lerna version 期間運(yùn)行的生命周期腳本
--include-merged-tags #在檢測(cè)到更改的包時(shí)包括來(lái)自合并分支的標(biāo)簽
--message <msg> #此選項(xiàng)別名為 -m 以與 git commit 進(jìn)行奇偶校驗(yàn)
--no-changelog #使用常規(guī)提交時(shí),不要生成任何 CHANGELOG.md 文件
--no-commit-hooks #允許 git commit hooks 在提交版本更改時(shí)運(yùn)行。通過(guò) --no-commit-hooks 禁用此行為
--no-git-tag-version #將提交對(duì) package.json 文件的更改并標(biāo)記發(fā)布。通過(guò) --no-git-tag-version 禁用該行為
--no-granular-pathspec #僅添加在版本控制過(guò)程中更改的葉包清單(可能還有變更日志)。這產(chǎn)生了 git add --packages/*/package.json 的等價(jià)物,但針對(duì)更改的內(nèi)容量身定制
--no-private #在選擇版本、提交和標(biāo)記版本時(shí)包含私有包。通過(guò) --no-private 禁用此行為
--no-push #將已提交和標(biāo)記的更改推送到配置的 git remote。通過(guò) --no-push 禁用此行為
--preid #使用此標(biāo)志運(yùn)行時(shí),lerna 版本將使用指定的預(yù)發(fā)布標(biāo)識(shí)符增加 premajor、preminor、prepatchprerelease semver bumps
--sign-git-commit #此選項(xiàng)類似于同名的 npm 版本選項(xiàng)
--sign-git-tag #此選項(xiàng)類似于同名的 npm 版本選項(xiàng)
--force-git-tag #此選項(xiàng)替換任何現(xiàn)有標(biāo)記而不是失敗
--tag-version-prefix #此選項(xiàng)允許提供自定義前綴而不是默認(rèn)前綴:v
--yes #使用此標(biāo)志運(yùn)行時(shí),lerna 版本將跳過(guò)所有確認(rèn)提示

不推薦使用的選項(xiàng)

:-:-
--cd-version #semver 關(guān)鍵字傳遞給 bump 位置
--repo-version #將明確的版本號(hào)傳遞給 bump 位置
--skip-git #請(qǐng)改用 --no-git-tag-version--no-push

bootstrap

將本地包鏈接在一起,并安裝其余的包依賴項(xiàng)

$ lerna bootstrap -- --production \
                     --no-optional
$ lerna bootstrap --hoist
:-:-
--hoist [glob] #repo 根目錄安裝與 glob 匹配的外部依賴項(xiàng),以便它們可用于所有包
--strict #與提升 (hoist) 一起使用時(shí),會(huì)在發(fā)出版本警告后拋出錯(cuò)誤并停止引導(dǎo)
--nohoist [glob] #不要在 repo 根目錄安裝與 glob 匹配的外部依賴項(xiàng)。這可用于選擇不提升某些依賴項(xiàng)
--ignore #當(dāng)與 bootstrap 命令一起使用時(shí),還可以在 lerna 中設(shè)置 --ignore 標(biāo)志

選項(xiàng)

:-:-
--ignore-prepublish #跳過(guò)默認(rèn)在引導(dǎo)程序包中運(yùn)行的預(yù)發(fā)布生命周期腳本
--ignore-scripts #跳過(guò)通常在引導(dǎo)程序包中運(yùn)行(準(zhǔn)備等)的任何生命周期腳本
--registry <url> #指定 npm 包的倉(cāng)庫(kù)地址
--npm-client <client> #必須是知道如何安裝 npm 包依賴項(xiàng)的可執(zhí)行文件
--use-workspaces #啟用與 Yarn Workspaces 的集成(從 yarn@0.27+ 開(kāi)始可用)
--no-ci #CI 環(huán)境中調(diào)用 npm ci 而不是 npm install
--force-local #此標(biāo)志會(huì)導(dǎo)致引導(dǎo)命令始終對(duì)本地依賴項(xiàng)進(jìn)行符號(hào)鏈接,而不管匹配的版本范圍如何

info 本地環(huán)境信息

$ lerna info

lerna notice cli v6.0.0
 Environment info:

  System(系統(tǒng)):
    OS: macOS 12.2
    CPU: (8) x64 Apple M1
  Binaries(二進(jìn)制文件):
    Node: 16.17.0 - /usr/local/bin/node
    Yarn: 1.22.10 - /usr/local/bin/yarn
    npm: 8.5.0 - /usr/local/bin/npm
  Utilities(實(shí)用程序):
    Git: 2.33.0 - /opt/homebrew/bin/git
  npmPackages:
    lerna: ^6.0.0 => 6.0.0

過(guò)濾選項(xiàng)

$ lerna exec --scope my-component -- ls -la
$ lerna run --scope toolbar-* test
$ lerna run --scope package-1 --scope *-2 lint

$ lerna exec --ignore package-{1,2,5}  -- ls -la
$ lerna run --ignore package-1  test
$ lerna run --ignore package-@(1|2) --ignore package-3 lint

# 列出自最新標(biāo)簽以來(lái)已更改的包的內(nèi)容
$ lerna exec --since -- ls -la
# 對(duì)自 main 以來(lái)發(fā)生更改的所有包運(yùn)行測(cè)試
$ lerna run test --since main
# 列出自 some-branch 以來(lái)發(fā)生變化的所有包
$ lerna ls --since some-branch

# my-component 及其所有依賴項(xiàng)將被引導(dǎo)
$ lerna bootstrap --scope my-component --include-dependencies

$ lerna bootstrap --scope "package-*" --ignore "package-util-*" --include-dependencies
# 所有匹配 “package-util-*” 的包都將被忽略,除非它們是
# 依賴于名稱與 “package-*” 匹配的包

選項(xiàng)

:-:-
--scope <glob> #僅包括名稱與給定 glob 匹配的包
--ignore <glob> #排除名稱與給定 glob 匹配的包
--no-private #排除私有包
--since [ref] #僅包括自指定 ref 以來(lái)已更改的包
--exclude-dependents #使用 --since 運(yùn)行命令時(shí)排除所有傳遞依賴項(xiàng),覆蓋默認(rèn)的“changed”算法
--include-dependents #無(wú)論 --scope--ignore--since 是什么,在運(yùn)行命令時(shí)都包括所有傳遞依賴項(xiàng)
--include-dependencies #無(wú)論 --scope--ignore--since # 是什么,在運(yùn)行命令時(shí)都包括所有傳遞依賴項(xiàng)
--include-merged-tags #使用 --since 運(yùn)行命令時(shí)包括來(lái)自合并分支的標(biāo)簽

list

列出本地程序包,也尊重所有可用的過(guò)濾選項(xiàng)

# 與 lerna list 相同,它本身類似于 ls 命令
lerna ls
# 相當(dāng)于 lerna ls -l,顯示長(zhǎng)輸出
lerna ll
# 相當(dāng)于 lerna ls -la,顯示所有包(包括私有包)
lerna la

選項(xiàng)

:-:-
--json顯示為 JSON #
--ndjson換行符分隔 #
-a,--all所有包 #
-l,--long顯示擴(kuò)展信息 #
-p,--parseable顯示可解析的輸出 #
--toposort按拓?fù)渑判?#
--graphJSON 格式鄰接依賴關(guān)系圖 #

changed

列出自上次標(biāo)記版本以來(lái)已更改的本地軟件包

  • lerna changed 支持 lerna ls 支持的所有選項(xiàng)
  • lerna ls 不同的是不支持過(guò)濾器選項(xiàng)

lerna changed 支持 lerna version 的以下選項(xiàng)

:-:-
--conventional-graduate#
--force-publish#
--ignore-changes#
--include-merged-tags#

init

創(chuàng)建新的 Lerna 倉(cāng)庫(kù)或?qū)F(xiàn)有倉(cāng)庫(kù)升級(jí)到當(dāng)前版本 Lerna

  • 如果 lerna 不存在,請(qǐng)將其添加到 package.json 中的 devDependency
  • 創(chuàng)建一個(gè) lerna.json 配置文件來(lái)存儲(chǔ)版本號(hào)
  • 如果不存在 .gitignore,則生成一個(gè)忽略文件

$ lerna init --independent

:-:-
--independent #使用獨(dú)立版本控制模式 #
--exact #添加或更新 lerna 的本地版本時(shí)將使用插入符范圍 #

它將配置 lerna.json 以強(qiáng)制所有后續(xù)執(zhí)行完全匹配

{
  "command": {
    "init": {
      "exact": true
    }
  },
  "version": "0.0.0"
}

import

將一個(gè)包導(dǎo)入到帶有提交歷史的 monorepo

# 開(kāi)始使用 Lerna
$ git init lerna-repo && cd lerna-repo
$ npx lerna init
$ npm install
# 添加提交
$ git add .
# 如果沒(méi)有提交,導(dǎo)入命令將失敗
$ git commit -m "Initial lerna commit"
# 導(dǎo)入其他存儲(chǔ)庫(kù)
$ npx lerna import <外部存儲(chǔ)庫(kù)的路徑>
$ npx lerna import ~/Product --flatten

選項(xiàng)

:-:-
--flatten #當(dāng)導(dǎo)入具有沖突的合并提交的存儲(chǔ)庫(kù)時(shí),導(dǎo)入命令將無(wú)法嘗試應(yīng)用所有提交
--dest #導(dǎo)入倉(cāng)庫(kù)時(shí),可以通過(guò) lerna.json 中列出的目錄來(lái)指定目標(biāo)目錄
--preserve-commit #每個(gè) git 提交都有一個(gè)作者和一個(gè)提交者

add

將依賴項(xiàng)添加到匹配的包

$ lerna add <package>[@version] \
        [--dev] [--exact] [--peer]

選項(xiàng)

:-:-
--dev #將新包添加到 devDependencies
--exact #添加具有精確版本(例如 1.0.1)而不是默認(rèn) ^ semver 范圍(例如 ^1.0.1)的新包
--peer #將新包添加到 peerDependencies
--registry <url> #使用自定義注冊(cè)表安裝目標(biāo)包
--no-bootstrap #跳過(guò)鏈?zhǔn)?lerna bootstrap

實(shí)例

# 將 mod-1 包添加到“prefix-”前綴文件夾中的包中
$ lerna add mod-1 packages/prefix-*
# 將 mod-1 安裝到mod-2
$ lerna add mod-1 --scope=mod-2
# 在 devDependencies 中安裝 mod-1 到 mod-2
$ lerna add mod-1 --scope=mod-2 --dev
# 在 peerDependencies 中安裝 mod-1 到 mod-2
$ lerna add mod-1 --scope=mod-2 --peer
# 在除 mod-1 之外的所有模塊中安裝 mod-1
$ lerna add mod-1
# 在所有模塊中安裝 babel-core
$ lerna add babel-core

diff

比較自上次發(fā)布以來(lái)的所有包或單個(gè)包

$ lerna diff [package]
$ lerna diff
$ lerna diff package-name # 區(qū)分一個(gè)特定的包

類似于 lerna changed,此命令運(yùn)行 git diff

clean

從所有包中刪除 node_modules 目錄

$ lerna clean

接受所有過(guò)濾選項(xiàng)。lerna clean 不會(huì)從根 node_modules 目錄中刪除模塊,即使您啟用了 --hoist 選項(xiàng)

add-caching

運(yùn)行設(shè)置基本緩存選項(xiàng)的向?qū)?/p>

$ lerna add-caching

將所有相互依賴的包符號(hào)鏈接在一起

$ lerna link

--force-local 設(shè)置會(huì)導(dǎo)致鏈接命令始終對(duì)本地依賴項(xiàng)進(jìn)行符號(hào)鏈接

repair

更新配置文件以匹配當(dāng)前安裝的 lerna 版本

$ npm i lerna@latest
$ lerna repair

lerna repair 在升級(jí)后最有用,可確保應(yīng)用新版本 lerna 的任何配置文件更改