最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

小項(xiàng)目中管理npm包版本的思路與方法

 更新時(shí)間:2021年06月08日 10:23:49   作者:Vincent就是我65724  
這篇文章主要給大家介紹了關(guān)于小項(xiàng)目中該如何管理npm包版本的思路與方法,npm包版本管理是非常重要的,文章通過示例代碼介紹的很詳細(xì),需要的朋友可以參考下

背景

筆者在最近碰到一個(gè)問題:

有一些項(xiàng)目沒有類似jenkins的自動(dòng)部署平臺(tái),前端部署都是本地執(zhí)行npm run build命令生成壓縮包,然后放到服務(wù)器上面,解壓到nginx 目錄, 但是有的時(shí)候遇到一個(gè)問題,比如項(xiàng)目中某個(gè)成員升級了其他組寫的一個(gè)組件packageA,但是其他成員可能沒有升級,導(dǎo)致上線后就會(huì)有一些問題,一個(gè)包還好,如果有好幾個(gè)包都沒有升級,那么可能導(dǎo)致一些意想不到的問題。

思路

首先就這個(gè)問題,我思考后有以下幾個(gè)問題

  • package.json中的包名的版本有幾個(gè)是用的^x.x.x的形式,不利于判斷
  • 如何對比包的版本

解決

問題1

針對第一個(gè)問題解決方案就是 直接用x.x.x的方式,一個(gè)包的更新必定是至少有一個(gè)人知道這個(gè)事情才會(huì)去更新包,所以包名是可以不帶任何標(biāo)識(shí)的

問題2

針對第二個(gè)問題

node_modules中的版本是低的,但是package.json的版本是最新的,所以我們可以自定一個(gè)腳本判斷兩個(gè)版本是否一致

const path = require('path');
const projectRoot = process.cwd();
const projectPack = require(path.resolve(projectRoot, 'package.json'));
// 需要對比的包名
const modules = ['element-ui'];
const allDependencies = {
  ...(projectPack.dependencies || {}),
  ...(projectPack.devDependencies || {}),
};

modules.forEach(module => {
  try {
    const packVersion = allDependencies[module];
    // 有一些包名是有文件夾的比如@vue/cli-service,是在@vue文件夾下
    const realPath = packVersion.aplit('/');
    const pack = require(path.resolve(
      ...[projectRoot, 'node_modules', ...realPath, 'package.json'],
    ));
    const needVersions = packVersion.match(/\d+/g);
    const realVersions = pack.version.match(/\d+/g);
    for (const i in needVersions) {
      if (
        isDef(needVersions[i]) &&
        isDef(realVersions[i]) &&
        parseInt(realVersions[i]) < parseInt(needVersions[i])
      ) {
        exit(module);
      }
    }
  } catch (error) {
    exit(module);
  }
});

function exit(moduleName) {
  throw new Error(`${moduleName} 版本過低,請執(zhí)行 npm i/npm install`);
}
function isDef(num) {
  return num !== null && num !== undefined;
}

package.json改造 增加check 腳本

 "scripts": {
    "check": "node build/checkNpmPackageVersion.js",
    "dev": "npm run check && vue-cli-service serve",
    "build": "npm run check && vue-cli-service build",
    "lint": "vue-cli-service lint"
  },

不足

  • 如果包名不是純數(shù)字的話對比有問題,因?yàn)槲覀児镜陌疾粠lpha,beta等,所以我沒有考慮
  • 有一些可以考慮和遠(yuǎn)程倉庫對比,比如調(diào)npm info包名命令將結(jié)果對比

總結(jié)

到此這篇關(guān)于小項(xiàng)目中管理npm包版本的思路與方法的文章就介紹到這了,更多相關(guān)小項(xiàng)目管理npm包版本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 算法系列15天速成 第八天 線性表【下】

    算法系列15天速成 第八天 線性表【下】

    上一篇跟大家聊過“線性表"順序存儲(chǔ),通過實(shí)驗(yàn),大家也知道,如果我每次向順序表的頭部插入元素,都會(huì)引起痙攣,效率比較低下,第二點(diǎn)我們用順序存儲(chǔ)時(shí),容易受到長度的限制,反之就會(huì)造成空間資源的浪費(fèi)
    2013-11-11
  • 從web到內(nèi)網(wǎng)滲透的一次過程詳解

    從web到內(nèi)網(wǎng)滲透的一次過程詳解

    本文非常詳細(xì)的描述了一次從web到內(nèi)網(wǎng)滲透的一次過程,并對每一步過程做了詳細(xì)的圖文示例及解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • 游戲開發(fā)Unity2D圖片任意形狀破碎裂片效果展示

    游戲開發(fā)Unity2D圖片任意形狀破碎裂片效果展示

    本篇文章屬于游戲開發(fā)Unity進(jìn)階篇,主要介紹了游戲開發(fā)Unity2D圖片任意形狀破碎裂片效果展示,有需要的朋友可以借鑒參考下,希望可以有所幫助
    2021-09-09
  • WebSocket部署服務(wù)器但外網(wǎng)無法連接的解決方法

    WebSocket部署服務(wù)器但外網(wǎng)無法連接的解決方法

    WebSocket是html5新增加的一種通信協(xié)議,目前流行的瀏覽器都支持這個(gè)協(xié)議,例如Chrome,Safari,Firefox,Opera,IE等等,下面這篇文章主要給大家介紹了關(guān)于WebSocket部署服務(wù)器但外網(wǎng)無法連接的解決方法,需要的朋友可以參考下。
    2017-10-10
  • Git 教程之工作區(qū)、暫存區(qū)和版本庫詳解

    Git 教程之工作區(qū)、暫存區(qū)和版本庫詳解

    本文主要介紹Git 工作區(qū)、暫存區(qū)和版本庫的知識(shí),這里整理了詳細(xì)的資料,有需要的小伙伴可以參考下
    2016-09-09
  • Git中恢復(fù)已刪除分支的幾種方法

    Git中恢復(fù)已刪除分支的幾種方法

    這篇文章主要介紹了在Git中恢復(fù)已刪除分支的幾種方法,包括查找提交記錄、恢復(fù)分支、推送恢復(fù)的分支等步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • php asp.net 比較 [推薦]

    php asp.net 比較 [推薦]

    如今當(dāng)提到 Web 開發(fā)時(shí),您有許多選擇。這些方法中許多都涉及到預(yù)處理 - 即,利用特定的標(biāo)記將代碼嵌入到 HTML 頁面中
    2009-06-06
  • 防范SQL注入式攻擊

    防范SQL注入式攻擊

    SQL注入式攻擊是利用是指利用設(shè)計(jì)上的漏洞,在目標(biāo)服務(wù)器上運(yùn)行Sql命令以及進(jìn)行其他方式的攻擊動(dòng)態(tài)生成Sql命令時(shí)沒有對用戶輸入的數(shù)據(jù)進(jìn)行驗(yàn)證是Sql注入攻擊得逞的主要原因。
    2009-07-07
  • 將編碼從GB2312轉(zhuǎn)成UTF-8的方法匯總(從前臺(tái)、程序、數(shù)據(jù)庫)

    將編碼從GB2312轉(zhuǎn)成UTF-8的方法匯總(從前臺(tái)、程序、數(shù)據(jù)庫)

    這篇文章主要介紹了將編碼從GB2312轉(zhuǎn)成UTF-8的方法匯總(從前臺(tái)、程序、數(shù)據(jù)庫),需要的朋友可以參考下
    2015-11-11
  • matlab 生成.bmp格式的文件

    matlab 生成.bmp格式的文件

    這篇文章主要介紹了matlab 生成.bmp格式的文件,本文以大小為M*N的圖片為例,說明頭文件格式和內(nèi)容。需要的朋友可以參考下
    2018-10-10

最新評論

崇信县| 斗六市| 疏勒县| 商河县| 峨眉山市| 大方县| 石棉县| 凭祥市| 西昌市| 胶州市| 旬阳县| 大石桥市| 水富县| 台州市| 武清区| 武鸣县| 楚雄市| 收藏| 潼南县| 南木林县| 启东市| 青州市| 岗巴县| 西乌珠穆沁旗| 乌审旗| 博白县| 平远县| 黄大仙区| 黄平县| 龙陵县| 临桂县| 浙江省| 广水市| 谷城县| 淳安县| 葵青区| 岚皋县| 古蔺县| 海城市| 志丹县| 绩溪县|