Lerna -- 管理包含多個(gè)包javascript項(xiàng)目的工具

Lerna -- 管理包含多個(gè)包javascript項(xiàng)目的工具

將一個(gè)大的代碼庫(kù)分離成不同的獨(dú)立版本控制的包可以極大的促進(jìn)代碼的共用,然而,在不同的庫(kù)作出改動(dòng)是容易混亂并且不容易追蹤,同時(shí)在不同的庫(kù)之間測(cè)試復(fù)雜度會(huì)很快增加。

為了解決以上問(wèn)題(也包括其他的問(wèn)題),一些項(xiàng)目將代碼庫(kù)組織成多包庫(kù)。在一個(gè)庫(kù)中開(kāi)發(fā)所有的包.

** Lerna 是一個(gè)使用git和npm來(lái)優(yōu)化管理多包倉(cāng)庫(kù)的流程的工具 **

lerna 倉(cāng)庫(kù)的樣子
my-lerna-repo/
  package.json
  packages/
    package-1/
      package.json
    package-2/
      package.json

lerna 能做什么

在lerna中兩個(gè)初始命令 lerna bootstraplerna publish。
bootstrap 鏈接在倉(cāng)庫(kù)中的依賴(lài)。 publish命令可以幫助發(fā)布和更新包

lerna 不能做什么

lerna 無(wú)服務(wù)器單一庫(kù)的部署工具,以來(lái)提升會(huì)和傳統(tǒng)的無(wú)服務(wù)器單一庫(kù)部署技術(shù)不相容。

開(kāi)始使用

lerna項(xiàng)目初始化,執(zhí)行l(wèi)erna init命令

$ mkdir lerna-repo && cd $_
$ npx lerna init

這將會(huì)創(chuàng)建一個(gè) lerna.json同時(shí)也添加一個(gè)packages文件夾,文件夾的目錄是:

lerna-repo/
  packages/
  package.json
  lerna.jsonk

如何工作

lerna 允許你使用兩個(gè)模式中的一個(gè)來(lái)管理你的項(xiàng)目,固定和獨(dú)立模式

固定模式(鎖定模式) 默認(rèn)

固定模式的lerna項(xiàng)目將操作一個(gè)版本線(xiàn), 該版本值在根目錄下的 lerna.json文件中的一個(gè)version字段中維護(hù)。當(dāng)你運(yùn)行 lerna pulish 時(shí),如果一個(gè)在lerna中且被依賴(lài)模塊從上次發(fā)布的版本之后更新過(guò),它將會(huì)在你新發(fā)布的版本中更新。這意味著,你只需要發(fā)布一個(gè)新的版本包當(dāng)你需要的時(shí)候。

注意: 如果要發(fā)布一個(gè)未使用的朱版本號(hào),所有的包都會(huì)被認(rèn)為是更新。

這種模式也是Babel正在使用的。

獨(dú)立模式

獨(dú)立模式的lerna項(xiàng)目允許維護(hù)者獨(dú)立給的對(duì)每個(gè)包的版本管理。每次發(fā)布的時(shí)候,將會(huì)提示改變每個(gè)包的主要 次要和分支版本號(hào)。

在lerna.json文件中將version字段改為independent來(lái)運(yùn)行獨(dú)立依賴(lài)模式。

概念

運(yùn)行 lerna --help 命令查看可用的命令行和配置項(xiàng)

lerna.json
{
  "version": "1.1.3",
  "npmClient": "npm",
  "command": {
    "publish": {
      "ignoreChanges": ["ignored-file", "*.md"],
      "message": "chore(release): publish",
      "registry": "https://npm.pkg.github.com"
    },
    "bootstrap": {
      "ignore": "component-*",
      "npmClientArgs": ["--no-package-lock"]
    }
  },
  "packages": ["packages/*"]
}
  • version: 當(dāng)前倉(cāng)庫(kù)版本
  • npmClient: 使用npm還是yarn來(lái)管理運(yùn)行客戶(hù)端命令
  • command.publish.ignoreChanges: 發(fā)布忽略
  • command.publish.message 發(fā)布的信息
  • command.publish.registry 倉(cāng)庫(kù)地址
  • command.bootstrap.ignore bootstrap忽略
  • command.bootstrap.npmClientArgs 在bootstrap 中執(zhí)行npm install傳入的參數(shù)
  • command.bootstrap.scope 指定bootstrap 的文件目錄
  • packages: 指定包的位置

在lerna.json中的包是那些包含package.json的文件夾,這是lerna如何識(shí)別葉子“包”,卻別與根package.json,用來(lái)管理整個(gè)倉(cāng)庫(kù)開(kāi)發(fā)依賴(lài)和腳本命令

結(jié)合glob的路徑配置來(lái)指定包目錄,【packages/*,modules/*】

公共開(kāi)發(fā)依賴(lài) devDependencies

大部分 devDependenced 可以被拉取到跟lerna倉(cāng)庫(kù),使用lerna link convert命令

上述命令將自動(dòng)提升依賴(lài),使用file:來(lái)替代

依賴(lài)提升有一些優(yōu)點(diǎn):

  • 所有的包使用給你版本的依賴(lài)
  • 可以維護(hù)依賴(lài)在根目錄下,
  • 減少依賴(lài)安裝時(shí)間
  • 更少的存儲(chǔ)空間

注意: 那些提供二級(jí)制執(zhí)行碼的包仍需要在每個(gè)包安裝

lerna

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 由于公司項(xiàng)目大多采用react-native實(shí)現(xiàn),在A(yíng)PP內(nèi)部運(yùn)行,但也要有H5的使用場(chǎng)景,以前很多項(xiàng)目都開(kāi)...
    pansly閱讀 5,170評(píng)論 0 2
  • 一、前言 最近準(zhǔn)備開(kāi)發(fā)前端的一個(gè)模塊化的庫(kù),業(yè)務(wù)級(jí)別,要求可以任意插拔隨意組合。大型工程,需要多人維護(hù)。以前的項(xiàng)目...
    年輕人多學(xué)點(diǎn)閱讀 1,341評(píng)論 0 2
  • 當(dāng)前端項(xiàng)目變得越來(lái)越大的時(shí)候,我們通常會(huì)將公共代碼拆分出來(lái),成為一個(gè)個(gè)獨(dú)立的npm包進(jìn)行維護(hù)。但是這樣一來(lái),各種包...
    SCQ000閱讀 5,617評(píng)論 0 50
  • 一、前言 最近準(zhǔn)備開(kāi)發(fā)前端的一個(gè)模塊化的庫(kù),業(yè)務(wù)級(jí)別,要求可以任意插拔隨意組合。大型工程,需要多人維護(hù)。以前的項(xiàng)目...
    NowhereToRun閱讀 34,185評(píng)論 1 20
  • lerna 概要 lerna是GitHub上面開(kāi)源的一款js代碼庫(kù)管理軟件, 用來(lái)對(duì)一系列相互耦合比較大、又相互獨(dú)...
    年輕人多學(xué)點(diǎn)閱讀 1,841評(píng)論 0 2

友情鏈接更多精彩內(nèi)容