脚手架启动前的检查功能开发
- 接上文,仍旧在 abc-cli 项目中
- 参考:https://blog.youkuaiyun.com/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, 查看输出- 这时候就打印出错误栈了,输出了一大堆
- 这样就完成了脚手架前置的启动检查功能
2964



被折叠的 条评论
为什么被折叠?



