前端架构: 脚手架通用框架封装之启动检查功能开发(教程四)

脚手架启动前的检查功能开发

  • 接上文,仍旧在 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.mzph.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…