文章插图
注意这里使用了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();});
文章插图
但是这里并不打算用原生的交互,而是使用
prompts
工具实现 。首先安装pnpm add prompts -S
然后模拟一个交互式表单,其中又输入文字,密码,单选,多选import prompts from 'prompts'const promptsOptions = [{type: 'text',name: 'user',message: '用户'},{type: 'password',name: 'password',message: '密码'},{type: 'select',//单选name: 'gender',message: '性别',choices: [{ title: '男', value: 0 },{ title: '女', value: 1 }]},{type: 'multiselect', //多选name: 'study',message: '选择学习框架',choices: [{ title: 'Vue', value: 0 },{ title: 'React', value: 1 },{ title: 'Angular', value: 2 }]},]const getInputInfo = async () => {const res = await prompts(promptsOptions)console.log(res)}getInputInfo()
然后执行看下效果文章插图
我们拿到用户输入的表单即可执行相应的操作 。
拉取模板当我们获取到用户输入或选择的信息的时候,我们就可以输出对应模板给用户 。这里有两种选择,一种是直接将模板放在包里,另一种是远程拉取git仓库 。本篇文章暂时先介绍第二种方式
首先安装
download-git-repo
,使用它的clone方法pnpm add download-git-repo -S
然后安装一个loading
插件ora
pnpm add ora -S
写一个clone函数(这里便于文章讲解全都写在一个文件里,后续会进行模块的规划)const gitClone = (remote, name, option) => {const downSpinner = ora('正在下载模板...').start();return new Promise((resolve, reject) => {download(remote, name, option, err => {if (err) {downSpinner.fail();console.log("err", chalk.red(err));reject(err);return;};downSpinner.succeed(chalk.green('模板下载成功!'));resolve();});});};
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Hadoop集群简单入门
- Tensorflow Lite从入门到精通
- dubbo的一系列配置与搭建
- 请问去未知暗殿怎么走(复古未知暗殿从哪里进图解)
- 神州风闻录最新侍从强度排行是怎么样的
- vue3中$attrs的变化与inheritAttrs的使用
- iphone13几个摄像头_iphone13四个摄像头吗
- DevOps|从特拉斯辞职风波到研发效能中的不靠谱人干的荒唐事
- iqoo9参数详细_iqoo9参数配置
- 基于tauri+vue3.x多开窗口|Tauri创建多窗体实践