lerna

前言

npm倉(cāng)庫(kù)管理工具的意義

為了方便代碼的共享,就需要將代碼拆分成多個(gè)包,存放在各自的npm倉(cāng)庫(kù)中。由于,各倉(cāng)庫(kù)代碼存在較大耦合性,容易出現(xiàn)各倉(cāng)庫(kù)之間修改混亂、難以跟蹤的問(wèn)題。因此,npm倉(cāng)庫(kù)管理工具出現(xiàn)了,使得代碼耦合、倉(cāng)庫(kù)獨(dú)立并存,實(shí)現(xiàn)優(yōu)化、管理javascript多包項(xiàng)目的功能


概述

javascript npm倉(cāng)庫(kù)管理工具

特點(diǎn)
  • 一個(gè)git倉(cāng)庫(kù),對(duì)應(yīng)多個(gè)npm倉(cāng)庫(kù)
  • 便于調(diào)試
  • 清晰的依賴關(guān)系
  • 減少依賴冗余
  • 自動(dòng)管理版本
官網(wǎng)

https://lerna.js.org/


安裝

yarn global add lerna

初次嘗試

創(chuàng)建git倉(cāng)庫(kù)
git init lerna-repo && cd lerna-repo
升級(jí)為lerna倉(cāng)庫(kù)
lerna init
創(chuàng)建內(nèi)部git倉(cāng)庫(kù),并關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)
cd packages
mkdir pkg_1 && cd pkg_1 && yarn init -y && cd ..
mkdir pkg_2 && cd pkg_2 && yarn init -y && cd ..
package.json
lerna.json
packages/
├── pkg_1
│   └── package.json
└── pkg_2
    └── package.json
pkg_2 提供API
// packages/pkg_2/index.js
const fn_hello = () => {
    return 'hello lerna'
}

module.exports = fn_hello
pkg_1 調(diào)用API
// packages/pkg_1/index.js
const fn_hello = require('pkg_2')

const print_hello = () => {
    const res = fn_hello()
    console.log(res)
}

module.exports = print_hello
修改package.json
// packages/pkg_1/package.json
"dependencies": {
    "pkg_2": "^1.0.0"
}
// packages/pkg_1/package.json
{
  name: "pkg_1",
  version: "1.0.0",
  dependencies: {
    "pkg_2": "^1.0.0"
  }
}

// packages/pkg_2/package.json
{
  name: "pkg_2",
  version: "1.0.0"
}
鏈接模塊,引用依賴
lerna bootstrap
修改lerna.json
{
  "version": "1.0.0",
  "npmClient": "yarn",
  "command": {
    "publish": {
      "registry": "npm倉(cāng)庫(kù)地址"
    }
  },
  "packages": ["packages/*"]
}
發(fā)布到npm倉(cāng)庫(kù)
// 登錄到verdaccio提供的npm私有倉(cāng)庫(kù)
npm adduser --registry npm倉(cāng)庫(kù)地址
lerna publish
查看npm倉(cāng)庫(kù)

常用命令

// 升級(jí)為lerna倉(cāng)庫(kù)
lerna init
  // lerna默認(rèn)使用的是集中版本,所有的package共用一個(gè)version
  // 如果希望不同的package擁有自己的版本,可以使用independent模式
  --independent

// 鏈接模塊,引用依賴
lerna bootstrap

// 導(dǎo)入指定git倉(cāng)庫(kù)的包作為lerna管理的包
lerna import <pathToRepo>

// 發(fā)布
lerna publish
  // 指定版本號(hào)
  --npm-tag [tagname]
  // 發(fā)布嘗鮮版
  --canary
  // 跳過(guò)git命令
  --skip-git
  // 強(qiáng)制發(fā)布,不進(jìn)行修改檢查
  --force-publish [packages / *]

// 列出所有分包
lerna ls

// 列出存在修改的分包
lerna changed

// 顯示分包的修改內(nèi)容
lerna diff [package]

// 運(yùn)行腳本
lerna run [script]

lerna.json參考說(shuō)明

{
  "version": "1.1.3",
  "npmClient": "npm",
  "command": {
    "publish": {
// lerna changed/publish期間,忽略的文件
      "ignoreChanges": ["ignored-file", "*.md"],
// 自定義 發(fā)布提示消息
      "message": "chore(release): publish",
// 倉(cāng)庫(kù)IP
      "registry": "https://npm.pkg.github.com"
    },
    "bootstrap": {
// lerna bootstrap期間,忽略的包
      "ignore": "component-*",
// lerna bootstrap期間,npm install 參數(shù)
      "npmClientArgs": ["--no-package-lock"]
    }
  },
// 每個(gè)包的路徑
  "packages": ["packages/*"]
}

相關(guān)資源

npm scripts

https://docs.npmjs.com/misc/scripts

npm scope

https://docs.npmjs.com/misc/scope

常見問(wèn)答

https://github.com/lerna/lerna/blob/master/FAQ.md
https://github.com/lerna/lerna/blob/master/doc/troubleshooting.md

最后編輯于
?著作權(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)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 你是否在開發(fā)項(xiàng)目的時(shí)候遇到了以下的一些問(wèn)題 多個(gè)項(xiàng)目開發(fā)的過(guò)程中使用到了很多的工具類的函數(shù)、因此一遍遍的復(fù)制粘貼 ...
    aboyl閱讀 5,351評(píng)論 0 2
  • lerna### Lerna 是一個(gè)用來(lái)優(yōu)化托管在git\npm上的多package代碼庫(kù)的工作流的一個(gè)管理工具,...
    pgf閱讀 41,138評(píng)論 5 13
  • lerna 關(guān)于 lerna 將大型代碼庫(kù)拆分為獨(dú)立版本的包對(duì)于代碼共享來(lái)說(shuō)十分有用。然而,跨許多存儲(chǔ)庫(kù)(acro...
    小黃人get徐先生閱讀 1,774評(píng)論 0 0
  • 夜空中最亮的星 云飛飛的演唱會(huì) 在音樂(lè)學(xué)院三樓 站得太累了 沒(méi)等結(jié)束就撤了 喜歡漂洋過(guò)海來(lái)看你 但是不能自己 我不...
    愛(ài)元若哥哥閱讀 161評(píng)論 0 1
  • 我從小的時(shí)候就有一個(gè)美好的夢(mèng)想,就是“飛翔”。何為“飛翔”,完成一件自己完成不了的事,實(shí)現(xiàn)自己一直努力的目標(biāo)。從...
    忘少年閱讀 283評(píng)論 0 1

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