成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

lerna管理package

PumpkinDylan / 3063人閱讀

摘要:最近發(fā)現(xiàn)公司一個(gè)項(xiàng)目的目錄組織挺奇怪的,所有的子項(xiàng)目都放在了目錄里,還有這種騷操作特意查了下資料,發(fā)現(xiàn)是一種比較流行的項(xiàng)目管理模式。

最近發(fā)現(xiàn)公司一個(gè)項(xiàng)目的目錄組織挺奇怪的,所有的子項(xiàng)目都放在了packages目錄里,還有這種騷操作?特意查了下資料,發(fā)現(xiàn)是一種比較流行的monorepo項(xiàng)目管理模式。近幾年比較火的React,Vue,Babel都是用的這種模式:

我們平常一般采用的都是multiple repositories的項(xiàng)目管理模式:把一個(gè)大項(xiàng)目拆分成若干個(gè)小項(xiàng)目,每個(gè)小項(xiàng)目都獨(dú)立的放在gitlab上。這種模式其實(shí)也沒(méi)啥不好,但是某些情況下,子項(xiàng)目A依賴子項(xiàng)目B,如果子項(xiàng)目B經(jīng)常改動(dòng),那么每次B改動(dòng)了,都要修改A,這時(shí)就非常麻煩。在開(kāi)發(fā)一個(gè)前端框架或者UI庫(kù)時(shí),就經(jīng)常會(huì)遇到上述情況,這時(shí)我們就可以考慮下monorepo

monorepo說(shuō)到底也只是一個(gè)理念,那么怎么才能實(shí)現(xiàn)這種代碼組織呢?

lerna

yarn中的Workspace

本文主要介紹下lerna的使用

源碼參考

lerna

全局安裝lerna

npm i lerna -g

lerna是基于git的,在github上新建一個(gè)項(xiàng)目learn-lerna

git clone [email protected]:deepred5/learn-lerna.git
cd learn-lerna

初始化項(xiàng)目:

lerna init

lerna會(huì)自動(dòng)創(chuàng)建一個(gè)packages目錄夾,我們以后的項(xiàng)目都新建在這里面。同時(shí)還會(huì)在根目錄新建一個(gè)lerna.json配置文件

{
  "packages": [
    "packages/*"
  ],
  "version": "0.0.0" // 共用的版本,由lerna管理
}
創(chuàng)建package

我們創(chuàng)建兩個(gè)package:

cd packages
mkdir prpr-lerna-core
cd prpr-lerna-core
npm init -y
cd packages
mkdir prpr-lerna-popular
cd prpr-lerna-popular
npm init -y

注意:這兩個(gè)package我們最后都是要發(fā)布到npm上的,所以名字請(qǐng)取特殊些,不能被人用過(guò)

添加依賴

prpr-lerna-popular依賴prpr-lerna-core,這時(shí)有兩種方法添加依賴:

第一種方法是修改prpr-lerna-popular/package.json,添加

{
  "dependencies": {
    "prpr-lerna-core": "^1.0.0"
  }
}

然后運(yùn)行lerna bootstrap

第二種方法是直接使用命令add

lerna add prpr-lerna-core --scope=prpr-lerna-popular

運(yùn)行之后,我們發(fā)現(xiàn)prpr-lerna-popular生成了node_modules,而node_modules里生成了指向prpr-lerna-core軟鏈,類似npm link的效果:

新建prpr-lerna-core/index.js

const API = "https://yande.re/post/popular_recent.json";

module.exports = {
  API
}

prpr-lerna-popular除了依賴prpr-lerna-core,還可以依賴其他開(kāi)源的庫(kù),比如我們使用axios

lerna add axios --scope=prpr-lerna-popular

新建prpr-lerna-popular/index.js

const { API } = require("prpr-lerna-core");
const axios = require("axios");

const getPopularImg = () => axios.get(API)

module.exports = getPopularImg;

// 測(cè)試代碼,發(fā)布時(shí)刪除
getPopularImg().then((res) => console.log(res.data.length));

測(cè)試一下:
node packages/prpr-lerna-popular/index.js
正常情況下可以輸出結(jié)果

發(fā)布到npm

首先把所有的代碼提交

cd learn-lerna
git add .
git commit -m "test publish"

注冊(cè)一個(gè)npmjs賬戶

npm login

登入你的賬戶,如果本地npm是淘寶鏡像,一定要換回https://registry.npmjs.org/地址?。?!

lerna publish

運(yùn)行publish,選擇發(fā)布的版本號(hào)

lerna可以幫我們管理版本號(hào),非常方便!

常用命令
lerna init #初始化
lerna bootstrap #下載依賴包或者生成本地軟連接
lerna add axios #所有包都添加axios
lerna add prpr-lerna-core --scope=prpr-lerna-popular #給包prpr-lerna-popularx添加prpr-lerna-core依賴
lerna list
lerna clean
其他事項(xiàng)

lerna默認(rèn)使用的是集中版本,所有的package共用一個(gè)version。如果希望不同的package擁有自己的版本,可以使用Independent模式

發(fā)布package的名字如果是以@開(kāi)頭的,例如@deepred/core,npm默認(rèn)以為是私人發(fā)布,需要使用npm publish --access public發(fā)布。但是lerna publish不支持該參數(shù),解決方法參考: issues

參考

淺談monorepo

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105444.html

相關(guān)文章

  • 像babel那樣使用lerna管理你的項(xiàng)目

    摘要:如何像那樣進(jìn)行多包管理呢項(xiàng)目的里面存放了旗下的所有包,比如。如果你不想這么麻煩,那么有一個(gè)辦法就是,不用,也就是你的包名不加前綴,這樣你的包就默認(rèn)是公共的包了,完全可以不用先去提交一次公共版本,才能使用來(lái)管理你的包,簡(jiǎn)單多了。 溫馨提示:請(qǐng)直接看最后面的正確操作,如果不懂,再回顧全文。 如何像 babel 那樣進(jìn)行多包管理呢? babel 項(xiàng)目的 packages 里面存放了 babe...

    Michael_Ding 評(píng)論0 收藏0
  • Monorepo——大型前端項(xiàng)目的代碼管理方式

    摘要:目前最常見(jiàn)的解決方案是和的特性。具體的使用方法移步官網(wǎng)而使用作為包管理器的同學(xué),可以在中以字段聲明,就會(huì)以的方式管理。這樣的話,無(wú)論你的包管理器是還是,都能發(fā)揮的優(yōu)勢(shì)要是包管理是,就會(huì)把依賴安裝交給處理。 最近我接手了一個(gè)項(xiàng)目,代碼量比較大、有點(diǎn)復(fù)雜。倉(cāng)庫(kù) clone 下來(lái)代碼有 50+ MB,npm install 安裝完體積飚到了近 2GB …… 熟悉了一下,這個(gè)項(xiàng)目比較復(fù)雜,采用...

    ziwenxie 評(píng)論0 收藏0
  • 從 1 到完美,寫一個(gè) js 庫(kù)、node 庫(kù)、前端組件庫(kù)

    摘要:從到完美,寫一個(gè)庫(kù)庫(kù)前端組件庫(kù)之前講了很多關(guān)于項(xiàng)目工程化前端架構(gòu)前端構(gòu)建等方面的技術(shù),這次說(shuō)說(shuō)怎么寫一個(gè)完美的第三方庫(kù)。使用導(dǎo)出模塊,就可以在使用這個(gè)庫(kù)的項(xiàng)目中構(gòu)建時(shí)使用功能。 從 1 到完美,寫一個(gè) js 庫(kù)、node 庫(kù)、前端組件庫(kù) 之前講了很多關(guān)于項(xiàng)目工程化、前端架構(gòu)、前端構(gòu)建等方面的技術(shù),這次說(shuō)說(shuō)怎么寫一個(gè)完美的第三方庫(kù)。 1. 選擇合適的規(guī)范來(lái)寫代碼 js 模塊化的發(fā)展大致有...

    rollback 評(píng)論0 收藏0
  • 從 1 到完美,寫一個(gè) js 庫(kù)、node 庫(kù)、前端組件庫(kù)

    摘要:從到完美,寫一個(gè)庫(kù)庫(kù)前端組件庫(kù)之前講了很多關(guān)于項(xiàng)目工程化前端架構(gòu)前端構(gòu)建等方面的技術(shù),這次說(shuō)說(shuō)怎么寫一個(gè)完美的第三方庫(kù)。使用導(dǎo)出模塊,就可以在使用這個(gè)庫(kù)的項(xiàng)目中構(gòu)建時(shí)使用功能。 從 1 到完美,寫一個(gè) js 庫(kù)、node 庫(kù)、前端組件庫(kù) 之前講了很多關(guān)于項(xiàng)目工程化、前端架構(gòu)、前端構(gòu)建等方面的技術(shù),這次說(shuō)說(shuō)怎么寫一個(gè)完美的第三方庫(kù)。 1. 選擇合適的規(guī)范來(lái)寫代碼 js 模塊化的發(fā)展大致有...

    xiaolinbang 評(píng)論0 收藏0
  • 說(shuō)明Yarn與Lerna管理monorepo使用

       我們先說(shuō)下 Yarn workspace  首先Yarn workspace 是 Yarn 提供的 monorepo 下,管理依賴的機(jī)制。這就說(shuō)主要對(duì)代碼倉(cāng)庫(kù)下,多個(gè) package 的依賴,進(jìn)行管理:將共同的依賴,做 hosting(提升)。前述這樣就可以有效的防止 package 中的包重復(fù)安裝。 workspace 機(jī)制,會(huì)在根目錄下,統(tǒng)一安裝依賴到 node_module,并生成...

    3403771864 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<