前端架構: 腳手架通用框架封裝之啟動檢查功能開發(教程四)

腳手架啟動前的檢查功能開發

  • 接上文,仍舊在 abc-cli 項目中
  • 參考:https://blog.csdn.net/Tyro_java/article/details/136431320
  • 現在要在腳手架啟動前要做一些邏輯,可以在 hook 鉤子函數中去書寫
  • 比如,進行node版本的對比,使用 semver 工具
  • 在 abc-cli 目錄下,執行 $ npm i semver -w packages/cli
  • 在 abc-cli/packages/cli/lib/index.js 中
    const commander = require('commander');
    const createInitCommand = require('@abc.com/init');
    const { log } = require('@abc.com/utils');
    const { program } = commander;
    const pkg = require('../package.json');
    const semver = require('semver');const LOWEST_NDDE_VERSION = '14.0.0'; // 最低允許運行的node版本// 檢查node版本
    function checkNodeVersion() {log.verbose('node version: ', process.version);// 前面 大于等于后面這個, 取反判斷,也就是如果不大于等于,處理相關邏輯if (!semver.gte(process.version, LOWEST_NDDE_VERSION)) {// 中斷并報錯throw new Error(`abc-cli 需要最低的nodejs版本為:${LOWEST_NDDE_VERSION}`)}
    }function preAction() {// 檢查node版本checkNodeVersion()
    }module.exports = (args) => {log.success('log test version', pkg.version);program.name(Object.keys(pkg.bin)[0]).usage('<command> [options]').version(pkg.version).option('-d, --debug', '是否開啟調試模式', false).hook('preAction', preAction);createInitCommand(program); // 注冊命令program.parse(process.argv)
    }
    
  • 這里可以調大上面 LOWEST_NDDE_VERSION 的參數來做測試,比如 114.0.0 版本
  • 在 abc-cli 目錄下執行 $ abc-cli init ss 發現報錯了
  • 以上會報錯,但是控制臺輸出非常難看, 因為打印出了錯誤棧,現在來優化下這個問題
  • module.exports 上面添加這行
    process.on('uncaughtException', function(e) {console.log(e.message);
    })
    
  • 再次執行,驗證,返回信息為:
    abc.com success log test version 0.0.0
    abc-cli 需要最低的nodejs版本為:114.0.0
    
    • 這樣就沒有報錯的錯誤棧的問題了
  • 同時,可以優化下 debug 的選項判斷,這塊比較通用單獨抽離出來
  • 在 abc-cli/packages/utils/lib/isDebug.js
    const { argv } = process;
    const isDebug = argv.includes('--debug') || argv.includes('-d');module.exports = isDebug;
    
  • 在之前 abc-cli/packages/utils/lib/log.js 中修改對 isDebug的使用
    const isDebug = require('./isDebug');// 基于調試模式來確定輸出日志的等級
    if (isDebug) {log.level = 'verbose'
    } else {log.level = 'info';
    }
    
  • 并在 abc-cli/packages/utils/lib/index.js 中注冊 isDebug
    const log = require('./log')
    const isDebug = require('./isDebug')module.exports = {log,isDebug,
    }
    
  • 同樣,在 abc-cli/packages/cli/lib/index.js 中的錯誤監聽中,這么修改
    const { log, isDebug } = require('@abc.com/utils');process.on('uncaughtException', function(e) {// 如果是 debug 模式,則輸出錯誤棧,否則直接輸出信息if (isDebug) {console.log(e);} else {console.log(e.message);}
    })
    
  • 在 abc-cli 目錄下執行 $ abc-cli init xx, 查看輸出正常
    abc.com success log test version 0.0.0
    abc-cli 需要最低的nodejs版本為:114.0.0
    
  • 在 abc-cli 目錄下執行 $ abc-cli init xx -d, 查看輸出
    • 這時候就打印出錯誤棧了,輸出了一大堆
  • 這樣就完成了腳手架前置的啟動檢查功能

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716611.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716611.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716611.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2023年12月CCF-GESP編程能力等級認證Scratch圖形化編程四級真題解析

一、單選題(共15題,共30分) 第1題 現代計算機是指電子計算機,它所基于的是( )體系結構。 A:艾倫圖靈 B:馮諾依曼 C:阿塔納索夫 D:埃克特-莫克利 答案:B 第2題 默認小貓角色,執行下列程序,以下說法正確的是? ( ) A:舞臺上會出現無數個小貓 B:舞臺只會出現…

java spring 02. AbstractApplicationContext

spring創建對象的順序&#xff0c;先創建beanfactory&#xff0c;再會把xml文件讀取到spring。 public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, Nullable ApplicationContext parent)throws BeansException {//調用父類的構造方法super(p…

Redis常用指令,jedis與持久化

1.redis常用指令 第一個是key的常用指令&#xff0c;第二個是數據庫的常用指令 前面的那些指令都是針對某一個數據類型操作的&#xff0c;現在的都是對所有的操作的 1.key常用指令 key應該設計哪些操作 key是一個字符串&#xff0c;通過key獲取redis中保存的數據 對于key…

flink重溫筆記(九):Flink 高級 API 開發——flink 四大基石之WaterMark(Time為核心)

Flink學習筆記 前言&#xff1a;今天是學習 flink 的第 9 天啦&#xff01;學習了 flink 四大基石之 Time的應用—> Watermark&#xff08;水印&#xff0c;也稱水位線&#xff09;&#xff0c;主要是解決數據由于網絡延遲問題&#xff0c;出現數據亂序或者遲到數據現象&…

通過大語言模型理解運維故障:評估和總結

張圣林 南開大學軟件學院副教授、博士生導師 第六屆CCF國際AIOps挑戰賽程序委員會主席 在ATC、WWW、VLDB、KDD、SIGMETRICS等國際會議和JSAC、TC、TSC等國際期刊發表高水平論文50余篇。主持國家自然科學基金項目2項&#xff0c;橫向項目13項&#xff08;與華為、字節跳動、騰訊…

Sqli-labs靶場第20關詳解[Sqli-labs-less-20]自動化注入-SQLmap工具注入

Sqli-labs-Less-20 通過測試發現&#xff0c;在登錄界面沒有注入點&#xff0c;通過已知賬號密碼admin&#xff0c;admin進行登錄發現&#xff1a; 登錄后會有記錄 Cookie 值 設想如果在Cookie嘗試加上注入語句&#xff08;報錯注入&#xff09;&#xff0c;測試是否會執行…

C++STL之vector

vector 1. vector介紹 vector文檔vector其實就是一個順序表&#xff0c;它表示可變大小數組的序列容器。像數組一樣&#xff0c;可以使用下標[] 來訪問vector的元素&#xff0c;和數組一樣高效&#xff1b;甚至&#xff0c;它的大小是可以動態改變的&#xff0c;其大小由容器自…

printf() 函數支持變長參數列表

printf() 函數也支持變長參數列表&#xff0c;可以使用省略號 … 來表示&#xff0c;用于指定要輸出的多個值。在函數內部&#xff0c;可以使用 va_start() 和 va_end() 宏來訪問變長參數列表中的值。例如&#xff1a; #include <stdio.h> #include <stdarg.h>voi…

軟考55-上午題-【數據庫】-數據庫設計步驟1

一、數據庫設計的步驟 新奧爾良法&#xff0c;四個主要階段&#xff1a; 1、用戶需求分析&#xff1a;手機用戶需求&#xff0c;確定系統邊界&#xff1b; 2、概念設計&#xff08;概念結構設計&#xff09;&#xff1a;是抽象概念模型&#xff0c;較理想的是采用E-R方法。 …

深度學習:開啟你的AI探索之旅

在這個信息爆炸的時代,人工智能(AI)已經滲透到我們生活的方方面面,從智能語音助手到自動駕駛汽車,從智能推薦系統到醫療影像診斷,AI的身影無處不在。而深度學習,作為AI領域的一大核心技術,更是引領著這場科技革命的浪潮。那么,如何入門深度學習,踏上這趟充滿挑戰與機…

深入Gradle:初識構建自動化的魅力

在軟件開發的世界中&#xff0c;構建工具是不可或缺的一部分。它們幫助我們自動化編譯、測試和打包應用程序的過程&#xff0c;從而節省時間并減少錯誤。在眾多構建工具中&#xff0c;Gradle以其靈活性、可擴展性和卓越的性能而脫穎而出。本篇文章將帶你走進Gradle的世界&#…

代碼隨想錄算法訓練營第七天

● 自己看到題目的第一想法 第454題.四數相加II 方法&#xff1a; 方法一&#xff1a; 暴力法 思路&#xff1a; 注意&#xff1a; 代碼&#xff1a; class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<i…

QT 網絡編程 8

1 基礎知識 udp tcp 2 UDP 框架 客戶端: QUdpSocket x; qint64 writeDatagram( const char *data, qint64 size, const QHostAddress &address, quint16 port );服務器: void Server::initSocket(){udpSocket new QUdpSocket(this);udpSocket->bind(QHostAddress…

macos jupyter notebook字體的修改

終端codemirror 記事本打開 搜索font-family 修改font-size保存即可

重學SpringBoot3-@ConditionalOnXxx條件注解

重學SpringBoot3-ConditionalOnXxx條件注解 引言常見的條件注解常見的條件注解示例擴展條件注解1. ConditionalOnJndi2. ConditionalOnJava3. ConditionalOnCloudPlatform4. ConditionalOnEnabledResourceChain5. 自定義條件注解 總結 引言 Spring Boot 提供了一組強大的條件注…

ERDAS監督分類與溫度反演教程

本期帶來監督分類教程&#xff0c;更多內容&#xff0c;歡迎關注小編的公眾號梧桐涼月哦&#xff01;&#xff01;&#xff01; 一、研究區自然、地理環境特征&#xff1a; 1、景德鎮市位于中國江西省東北部&#xff0c;地處贛江中游的贛北盆地&#xff0c;地形地貌以丘陵和低…

mitmproxy代理

文章目錄 mitmproxy1. 網絡代理2. 安裝3. Https請求3.1 啟動mitmproxy3.2 獲取證書3.3 配置代理3.4 運行測試 4. 請求4.1 讀取請求4.2 修改請求4.3 攔截請求 5. 響應5.1 讀取響應5.2 修改響應 6. 案例&#xff1a;共享賬號6.1 登錄bilibili獲取cookies6.2 在代理請求中設置cook…

ER-NeRF實時對話數字人模型訓練與部署

ER-NeRF是基于NeRF用于生成數字人的方法&#xff0c;可以達到實時生成的效果。 下載源碼 cd D:\Projects\ git clone https://github.com/Fictionarry/ER-NeRF cd D:\Projects\ER-NeRF 下載模型 準備面部解析模型 wget https://github.com/YudongGuo/AD-NeRF/blob/master/…

MyBatisPlus入門教程

MyBatisPlus MyBatis-Plus (opens new window)&#xff08;簡稱 MP&#xff09;是一個 MyBatis (opens new window) 的增強工具&#xff0c;在 MyBatis 的基礎上只做增強不做改變&#xff0c;為簡化開發、提高效率而生。 官網地址&#xff1a;https://baomidou.com/ 一、入門案…

sql注入之sqli-labs-less-1 錯誤注入

輸入?id1 得到登錄頁面&#xff1a; 通過order by 函數試探&#xff1a; 5的時候報錯 試探到3 的時候返回正確的值&#xff1a; 然后繼續注入&#xff1a;?id -1 union select 1,2,3 -- 查看回顯點&#xff1a; 開始查看數據庫內容&#xff1a;id-1 union select 1,databa…