提示版本号,kitty-ui -h
显示帮助信息等 。而实现这些基本原理就是process.argv
将create-kitty
下的入口文件index.js
修改为
#! /usr/bin/env nodeconsole.log(process.argv);
然后执行这个文件并带几个参数

文章插图
然后会发现用户传的参数在
process.argv
数组的第二位以后,这样我们就可以根据用户输入不同参数做不同操作了 。但是这样很不方便,所以我们可以使用框架来解决 。使用第三方库解析参数首先安装
command-line-args
库pnpm add command-line-args -S
接下来看它是如何获取用户输入参数的#! /usr/bin/env nodeimport commandLineArgs from 'command-line-args';//配置命令参数const optionDefinitions = [{ name: 'version', alias: 'v', type: Boolean },{ name: 'arg1', type: String },{ name: 'arg2', type: Number },];const options = commandLineArgs(optionDefinitions);console.log(options);

文章插图
注意这里使用了es6的语法,所以需要将
package.json
中的type指定为module
接下来实战一些,检测用户输入
--help
指令,然后我们输出一个帮助的配置 。首先安装
command-line-usage
pnpm add command-line-usage -S
首先引入commandLineUsage
,然后写个配置import commandLineUsage from 'command-line-usage';//帮助内容const helpSections = [{header: 'create-kitty',content: '一个快速生成组件库搭建环境的脚手架',},{header: 'Options',optionList: [{name: 'version',typeLabel: '{underline boolean}',description: '版本号',},{name: 'arg1',typeLabel: '{underline string}',description: '参数1',},{name: 'arg2',typeLabel: '{underline number}',description: '参数2',},],},];
在command-line-args
中配置个help
命令,当获取到help
的时候直接打印const optionDefinitions = [{ name: 'help', alias: 'h', type: Boolean },{ name: 'version', alias: 'v', type: Boolean },{ name: 'arg1', type: String },{ name: 'arg2', type: Number },];const options = commandLineArgs(optionDefinitions);if (options.help) console.log(commandLineUsage(helpSections))

文章插图
但是这样好像不太好看 。这里可以借助
chalk
工具给打印加个颜色pnpm add chalk -S
我比较喜欢绿色,所以让控制台输出绿色的字体import chalk from 'chalk';...if (options.help) console.log(chalk.green(commandLineUsage(helpSections)))

文章插图
当然它还有很多用法,感兴趣可以自己去研究 。到这里关于用户参数解析部分差不多就结束了,下面介绍如何实现交互式命令
交互式命令当我们使用脚手架时,有些会提示我们输入项目名称和选择模板等,比如执行
npm create vite
的时候
文章插图
如果只是简单交互可以通过node自带的
process.stdin
或者readline
模块实现 。比如用readline
实现一个简单的交互式命令import readline from 'readline'...const rl = readline.createInterface({input: process.stdin,output: process.stdout,});rl.question('你是谁?', function (anwser) {console.log(`我是${anwser}`);//添加close事件,不然不会结束rl.close();});
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2023年9月29日是入学吉日吗 2023年9月29日入学好不好
- 2023年9月29日开学黄道吉日 2023年9月29日开学好不好
- 2023年9月29日适合举办成人仪式吗 2023年9月29日举办成人仪式黄道吉日
- 2023年9月29日上学好不好 2023年9月29日上学行吗
- 2023年农历八月十五堵蚂蚁洞吉日 2023年9月29日适合堵蚂蚁洞吗
- 2023年9月29日是大扫除的黄道吉日吗 2023年9月29日大扫除行吗
- 2023年9月29日是堵蚁穴吉日吗 2023年9月29日堵蚁穴好不好
- 2023年9月29日取蜂蜜吉日一览表 2023年农历八月十五取蜂蜜吉日
- 2023年9月29日是剃头吉日吗 2023年9月29日剃头吉日一览表
- 2023年9月29日年前洗澡好吗 2023年9月29日年前洗澡好不好