濮阳杆衣贸易有限公司

主頁 > 知識庫 > 小項目中管理npm包版本的思路與方法

小項目中管理npm包版本的思路與方法

熱門標簽:外呼系統(tǒng)怎么群發(fā)短信 地圖標注項目幾個月 400電話申請到底哪家好 宿遷怎么辦理400電話 谷歌地圖標注日期 400電話辦理費用低 蘇州呼叫中心外呼系統(tǒng)哪家強 聯(lián)通外呼系統(tǒng)電腦app軟件 鶴壁高頻外呼系統(tǒng)多少錢一個月

背景

筆者在最近碰到一個問題:

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

思路

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

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

解決

問題1

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

問題2

針對第二個問題

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

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ù)字的話對比有問題,因為我們公司的包名都不帶alpha,beta等,所以我沒有考慮
  • 有一些可以考慮和遠程倉庫對比,比如調(diào)npm info包名命令將結果對比

總結

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

標簽:錫林郭勒盟 鄂爾多斯 莆田 丹東 遵義 襄陽 哈爾濱 雙鴨山

巨人網(wǎng)絡通訊聲明:本文標題《小項目中管理npm包版本的思路與方法》,本文關鍵詞  小項,目中,管理,npm,包版本,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《小項目中管理npm包版本的思路與方法》相關的同類信息!
  • 本頁收集關于小項目中管理npm包版本的思路與方法的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    瓦房店市| 伊春市| 鄂伦春自治旗| 平山县| 新泰市| 东乡县| 炎陵县| 利辛县| 绥宁县| 凤翔县| 九寨沟县| 迭部县| 定远县| 兴文县| 张家口市| 景洪市| 阿鲁科尔沁旗| 潼南县| 蓝田县| 保德县| 天长市| 铜梁县| 澄迈县| 黔江区| 南江县| 临潭县| 阳城县| 平阳县| 孝义市| 汉沽区| 孟津县| 小金县| 郎溪县| 大城县| 吉木乃县| 合水县| 铁力市| 新津县| 陕西省| 喀喇| 汾阳市|