inquirer介绍及配合lerna在Vue中使用示例

news/2025/2/7 21:26:30/

目录

  • 安装
  • 基本用法
  • 使用多个提示框
  • 动态选择(动态选项)
  • 表单式输入
  • 配合lerna在Vue中使用示例

Inquirer 是一个用于创建交互式命令行工具的 Node.js 库,常用于收集用户输入。它提供了多种类型的提示框,可以用于创建交互式应用程序(比如 CLI 工具),并且支持各种类型的输入,包括文本、选择框、确认框、密码输入框等。这个库在开发过程中非常有用,尤其是在构建脚本和自动化工具时。

安装

首先,你需要安装 inquirer

npm install inquirer

基本用法

  1. 文本输入框(input)

input 提示允许用户输入一段文本。

javascript">const inquirer = require('inquirer');inquirer.prompt([{type: 'input',name: 'username',message: 'Enter your username:'}
]).then(answers => {console.log(`Hello, ${answers.username}!`);
});

上面的代码会显示一个提示框,要求用户输入他们的用户名。

  1. 选择框(list)

list 提示允许用户从一组选项中选择一个。

javascript">inquirer.prompt([{type: 'list',name: 'color',message: 'Choose your favorite color:',choices: ['Red', 'Green', 'Blue']}
]).then(answers => {console.log(`Your favorite color is ${answers.color}`);
});

此代码会显示一个选择框,允许用户选择一个颜色。

  1. 多选框(checkbox)

checkbox 提示允许用户从多个选项中选择一个或多个。

javascript">inquirer.prompt([{type: 'checkbox',name: 'fruits',message: 'Select your favorite fruits:',choices: ['Apple', 'Banana', 'Cherry', 'Date']}
]).then(answers => {console.log(`You selected: ${answers.fruits.join(', ')}`);
});

在这个例子中,用户可以选择多个水果。

  1. 确认框(confirm)

confirm 提示要求用户确认某个操作(例如“是”或“否”)。

javascript">inquirer.prompt([{type: 'confirm',name: 'proceed',message: 'Do you want to proceed?'}
]).then(answers => {if (answers.proceed) {console.log('Proceeding...');} else {console.log('Operation cancelled.');}
});
  1. 密码输入框(password)

password 提示框会隐藏用户输入(用于收集密码等敏感信息)。

javascript">inquirer.prompt([{type: 'password',name: 'password',message: 'Enter your password:'}
]).then(answers => {console.log('Password entered:', answers.password);
});

使用多个提示框

你可以同时使用多个不同类型的提示框,通过将它们组合到 prompt 数组中。

javascript">inquirer.prompt([{type: 'input',name: 'name',message: 'What is your name?'},{type: 'list',name: 'color',message: 'What is your favorite color?',choices: ['Red', 'Green', 'Blue']}
]).then(answers => {console.log(`Hello, ${answers.name}. Your favorite color is ${answers.color}.`);
});

动态选择(动态选项)

inquirer 允许你根据用户输入动态生成选项。

javascript">inquirer.prompt([{type: 'input',name: 'country',message: 'Which country are you from?'},{type: 'list',name: 'city',message: 'Which city do you live in?',choices: function(answers) {const cities = {'USA': ['New York', 'Los Angeles', 'Chicago'],'India': ['Delhi', 'Mumbai', 'Bangalore']};return cities[answers.country] || [];}}
]).then(answers => {console.log(`You are from ${answers.city}, ${answers.country}.`);
});

在这个示例中,城市选项会根据用户选择的国家动态变化。

表单式输入

inquirer 还支持通过 form 提示收集多个输入。

javascript">const questions = [{type: 'input',name: 'name',message: 'What is your name?'},{type: 'input',name: 'age',message: 'What is your age?'}
];inquirer.prompt(questions).then(answers => {console.log(`Name: ${answers.name}, Age: ${answers.age}`);
});

配合lerna在Vue中使用示例

  1. 项目中根目录下新建文件run-project.js
javascript">const fs = require('fs');
const path = require('path');
const { exec } = require('child_process');
const inquirer = require('inquirer');// 获取所有子项目
const packagesDir = path.join(__dirname, 'packages');
const projects = fs.readdirSync(packagesDir).filter((dir) => {const projectPath = path.join(packagesDir, dir);return fs.statSync(projectPath).isDirectory();
});// 如果没有子项目,提示并退出
if (projects.length === 0) {console.log('没有找到任何子项目!');process.exit(1);
}// 让用户选择要运行的项目
inquirer.prompt([{type: 'list',name: 'project',message: '请选择要运行的项目:',choices: projects,},]).then((answers) => {const selectedProject = answers.project;const projectPath = path.join(packagesDir, selectedProject);// 检查项目是否有 dev 脚本const packageJsonPath = path.join(projectPath, 'package.json');if (!fs.existsSync(packageJsonPath)) {console.log(`项目 ${selectedProject} 没有 package.json 文件!`);process.exit(1);}const packageJson = require(packageJsonPath);if (!packageJson.scripts || !packageJson.scripts.dev) {console.log(`项目 ${selectedProject} 没有 dev 脚本!`);process.exit(1);}// 运行项目的 dev 脚本console.log(`正在运行项目 ${selectedProject}...`);const childProcess = exec(`cd ${projectPath} && npm run dev`, (error, stdout, stderr) => {if (error) {console.error(`执行错误: ${error.message}`);return;}if (stderr) {console.error(`错误输出: ${stderr}`);return;}console.log(`输出: ${stdout}`);});// 监听子进程的输出childProcess.stdout.on('data', (data) => {console.log(data);});childProcess.stderr.on('data', (data) => {console.error(data);});}).catch((error) => {console.error('发生错误:', error);});
  1. 在package.json里面写入配置
javascript">"scripts": {"start": "node run-project.js"},
  1. 终端运行
npm start

http://www.ppmy.cn/news/1570158.html

相关文章

无人机的续航能力和飞行效率概述!

一、续航能力对飞行效率的影响 续航时间限制任务范围: 无人机的续航能力直接决定了其能够持续执行任务的时间。续航时间短意味着无人机需要在更短的时间内完成任务或频繁更换电池,从而限制了任务的范围和复杂性。 续航影响作业效率: 长时…

数据加载器--不同文档数据格式的加载方法

文章目录 CSVHTMLJSONMarkdownPDF嵌入模型包装器 LangChain有很强的数据加载能力,而且它可以处理各种常见的数据格式,例如CSV、文件目录、HTML、JSON、Markdown及PDF等。下面,分别介绍这些不同的文档格式数据的加载方法。CSV逗号分隔值(Comma…

DeepSeek推动大语言模型发展进入新阶段

过年,最火的还是国产AI,无论是Deepseek V3 R1模型超越ChatGPT 4o,还是国产机器人春晚亮相,不仅让国人眼前一亮,也让IT界大跌眼镜。 一、Deepseek的影响力 Deepseek仅凭一己之力,让英伟达芯片商总市值大跌…

C中静态库和动态库的使用

2.使用尖括号包括 如果要使用尖括号包括头文件,有两种方法 1.将头文件移动到标准头文件目录,linux为/usr/local/include.windows下为C:\MinGW\include 2.编译时指定头文件目录,gcc -I/头文件目录 … 编译时-I参数就是用于指定头文件目录 3.静态库 将文件编译为静态库,可以…

低代码提升交付效率的公式计算

低(无)代码平台(后统称“低代码”)能够提升数字化应用建设、交付效率,已经成为IT从业人员的共识。目前,大部分CIO/CDO都能清晰定位和认知低代码的特点和作用。但仍然有人认为,使用了低代码工具软…

开放式TCP/IP通信

一、1200和1200之间的开放式TCP/IP通讯 第一步:组态1214CPU,勾选时钟存储器 第二步:防护与安全里面连接机制勾选允许PUT/GET访问 第三步:添加PLC 第四步:点击网络试图,选中网口,把两个PLC连接起…

HTML5教程之标签(2)

HTML5 <b> 标签 实例 在HTML5中&#xff0c;你可以使用<b>标签来对某些文本实现加粗的效果&#xff0c;请参考下述的示例&#xff1a; <p>这是一个普通的文本- <b>这是一个加粗文本</b>。</p> 尝试一下 浏览器支持 所有主流浏览器都支…

【C语言】自定义类型讲解

文章目录 一、前言二、结构体2.1 概念2.2 定义2.2.1 通常情况下的定义2.2.2 匿名结构体 2.3 结构体的自引用和嵌套2.4 结构体变量的定义与初始化2.5 结构体的内存对齐2.6 结构体传参2.7 结构体实现位段 三、枚举3.1 概念3.2 定义3.3 枚举的优点3.3.1 提高代码的可读性3.3.2 防止…