如何使用lerna進行多包(package)管理

来源:https://www.cnblogs.com/zdsdididi/archive/2022/06/20/16394289.html
-Advertisement-
Play Games

為什麼要用lerna 將大型代碼倉庫分割成多個獨立版本化的 軟體包(package)對於代碼共用來說非常有用。但是,如果某些更改 跨越了多個代碼倉庫的話將變得很 麻煩 並且難以跟蹤,並且, 跨越多個代碼倉庫的測試將迅速變得非常複雜。 為瞭解決這些(以及許多其它)問題,某些項目會將 代碼倉庫分割成多個 ...


為什麼要用lerna

將大型代碼倉庫分割成多個獨立版本化的 軟體包(package)對於代碼共用來說非常有用。但是,如果某些更改 跨越了多個代碼倉庫的話將變得很 麻煩 並且難以跟蹤,並且, 跨越多個代碼倉庫的測試將迅速變得非常複雜。

為瞭解決這些(以及許多其它)問題,某些項目會將 代碼倉庫分割成多個軟體包(package),並將每個軟體包存放到獨立的代碼倉庫中。但是,例如 Babel、 React、Angular、Ember、Meteor、Jest 等項目以及許多其他項目則是在 一個代碼倉庫中包含了多個軟體包(package)併進行開發。

Lerna 是一種工具,針對 使用 git 和 npm 管理多軟體包代碼倉庫的工作流程進行優化

npm初始化

新建文件夾spring-breeze,在集成終端輸入
npm init -y
根目錄會生成package.json:

{
  "name": "spring-breeze",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

安裝lerna

全局安裝lerna
執行:npm i lerna -g
安裝完成後執行:lerna init
執行完成後後出現這樣的目錄結構

- packages(目錄)
- lerna.json(配置文件)
- package.json(工程描述文件)

初始化兩個package

預設情況下,package是放在packages目錄下的.創建包可以使用命令lerna create [loc]
lerna create core packages/core
lerna create core packages/tools

將packages/core/lib/core.js改為:

'use strict';
console.log("我是core包~~")

將packages/tools/lib/tools.js改為:

'use strict';
console.log("我是tools包~~")

此時目錄結構為

-- packages(目錄)
  -- core
    ...
    -- lib
      -- core.js
    -- package.json 
    -- README.md
  - tools
    ...
    -- lib
      -- tools.js 
    -- package.json 
    -- README.md
- lerna.json(配置文件)
- package.json(工程描述文件)
...

修改包名

為了防止重名,包名一般改為@組織/包,如現在這個項目core應該改為:@spring-breeze/core;tools改為:@spring-breeze/tools

例如core模塊:

  • packages/core/package.json:
{
  "name": "@spring-breeze/core",
  "version": "0.0.1",
  "description": "> TODO: description",
  "author": "******",
  "homepage": "",
  "license": "ISC",
  "main": "lib/core.js",
  "directories": {
    "lib": "lib",
    "test": "__tests__"
  },
  "files": [
    "lib"
  ],
  "repository": {
    "type": "git",
    "url": "******"
  },
  "scripts": {
    "test": "echo \"Error: run tests from root\" && exit 1"
  }
}

安裝第三方包lerna add

  • 添加公共依賴

    在根目錄下執行(在哪個目錄執行都一樣):lerna add lodash
    此時會發現core和tools都被安裝了lodash

  • 添加單獨依賴

    lerna add jquery --scope=core
    core就會被安裝了jquery

刪除依賴lerna clean

執行lerna clean會刪除所有包中的node_modules

安裝所有依賴lerna bootstrap

執行lerna bootstrap會重新安裝所有依賴

測試本地包

如果本地開發的兩個包有所關聯,用lerna進行調試非常的簡單,只需要將需要用的本地包版本號寫入依賴執行:lerna link就可以了;例如在core模塊使用tools模塊

  • package添加依賴:"@spring-breeze/tools": "^0.0.1"
{
  "name": "@spring-breeze/core",
  "version": "0.0.1",
  "description": "> TODO: description",
  "author": "******",
  "homepage": "",
  "license": "ISC",
  "main": "lib/core.js",
  "directories": {
    "lib": "lib",
    "test": "__tests__"
  },
  "files": [
    "lib"
  ],
  "repository": {
    "type": "git",
    "url": "******"
  },
  "dependencies": {
    "@spring-breeze/tools": "^0.0.1"
  },
  "scripts": {
    "test": "echo \"Error: run tests from root\" && exit 1"
  }
}

添加完成之後執行lerna link

  • core中使用:packages/core/lib/core.js
'use strict';
require("@spring-breeze/tools")

node執行core.js就會發現控制台列印:我是tools包~~。這樣就可以進行本地的調試了

發佈前準備

調試完成就可以發佈了,發佈流程如下:

  • 註冊npm賬戶
  • 新建組織spring-breeze(根據自己項目而定)
  • 執行npm login
  • 分別在core和utils下的package.json中配置
 "publishConfig": {
    "access": "public"
  }
  • 新建gitignore
*node_modules
  • 新建git倉庫,將項目git remote add "你的git倉庫",並且提交項目至git倉庫
git remote add https://gitee.com/geeksdidi/spring-breeze.git  
git add .   
git commit -m "初始化"
git push -u origin master
  • 新建LICENSE.md(可以是空文件)
  • 修改一個文件執行 lerna publish

註意:每次發佈新版本之前都有將代碼提交到git上

查看已發佈的package

登陸npm官網 即可看到自己發佈的package


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄 一、前景回顧 二、用C語言編寫內核 三、載入內核 四、運行測試 一、前景回顧 本回開始,我們要開始編寫內核代碼了,在此之前,先梳理一下已經完成的工作。 藍色部分是目前已經完成的部分,黃色部分是本節將要實現的。 二、用C語言編寫內核 為什麼要用C語言來編寫內核呢,其實用彙編語言也可以實現,只是對 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 VS中有一鍵編譯+自動運行,Linux也給我們提供了對應的編譯方式,雖然不及VS那麼便捷,但是相比於手動輸入 gcc -o add add.c ,我們一句make就可以搞定 Makefile是一個文件,能夠存放上述 gcc -o add add. ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 1. 伺服器要求: 建議最小硬體配置:2核CPU、2G記憶體、20G硬碟 伺服器最好可以訪問外網,會有從網上拉取鏡像需求,如果伺服器不能上網,需要提前下載對應鏡像並導入節點 1.1 軟體環境: 1.2 伺服器規劃: 1.3 架構圖: 2. 操作系統 ...
  • ClickHouse核心架構設計是怎麼樣的?ClickHouse核心架構模塊分為兩個部分:ClickHouse執行過程架構和ClickHouse數據存儲架構,下麵分別詳細介紹。 ClickHouse執行過程架構 總的來說,結合目前搜集到的一些資料,可以看到目前ClickHouse核心架構由下圖構成, ...
  • 原文鏈接:基於開源大數據調度系統Taier的Web前端架構選型及技術實踐 課件獲取:關註公眾號**“數棧研習社”,後臺私信“Taier”**獲得直播課件 視頻回放:點擊這裡 Taier開源項目地址:github丨gitee 上兩期,我們為大家分享了Taier入門及控制台的介紹,本期我們為大家分享Ta ...
  • **導讀:**在公司內部,業務線經常面臨數據有哪些、質量如何、是否可用、能產生多大價值的困惑,並且,隨著數據量的增加,計算和存儲資源面臨瓶頸。本次將圍繞數據治理重點關註的計算、存儲等方面,分享數據治理的產品實踐。通過分享,一方面可以瞭解當前業務線主要面臨的待治理的數據問題;另一方面,從計算、存儲等主 ...
  • user_profile表: id device_id gender age university province 1 2138 male 21 北京大學 Beijing 2 3214 male 復旦大學 Shanghai 3 6543 female 20 北京大學 Beijing 4 2315 ...
  • 隨著科技的發展,用戶通過網路進行線上支付越來越方便。平時上網購物、交水電費、轉賬匯款等都需要綁定銀行卡,但要手動輸入16-19位銀行卡號,速度慢、易出錯始終是線上移動支付的一個“硬傷”。為了給移動商業企業的用戶打造優質的支付體驗,簡化操作程式已經成為提升企業競爭力的重要手段。因此,使用華為機器學習服 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...