主题
命令行交互
inquirer
type 指定交互类型
name 是结果的 key
message 标题
default 默认值
choices 每个选项
loop 是否能够循环import inquirer from "inquirer";
import { existsSync } from "fs";
import { rm } from "fs/promises";
import path from "path";示例
js
const res = await inquirer.prompt([
{
// 文本输入
type: "input",
name: "1",
message: "问题=》1",
default: "问题1 默认值",
},
{
// 只能是数字
type: "number",
name: "2",
message: "问题=》2",
default: "问题2 因为输入非数字走了默认值",
},
{
// 确认问题
type: "confirm",
name: "3",
message: "问题=》3",
default: false,
},
{
// 选择列表--单选
type: "list",
name: "4",
message: "问题=》4",
default: 2,
choices: ["选项1", "选项2", "选项3"],
loop: true,
},
{
type: "rawlist",
name: "5",
message: "问题=》5",
default: 2,
choices: ["选项1", "选项2", "选项3"],
loop: true,
},
{
type: "expand",
name: "6",
message: "问题=》6",
choices: [
{ key: "z", name: "item-z", value: "item-v-z" },
{ key: "x", name: "item-x", value: "item-v-x" },
{ key: "c", name: "item-c", value: "item-v-c" },
],
default: "x",
},
{
// 选择列表--多选
type: "checkbox",
name: "7",
message: "问题=》7",
choices: ["a", "b", "c"],
default: 1,
loop: true,
},
]);
console.log(res);自定义
js
console.clear();
const res = await inquirer.prompt([
{
// 文本输入
type: "input",
name: "name",
message: "Project name:",
default: "vite-project",
},
{
// 选择列表--单选
type: "list",
name: "frame",
message: "Select a framework:",
default: "Vanilla",
choices: ["Vanilla", "vue", "React", "Preact"],
loop: true,
},
{
// 选择列表--单选
type: "list",
name: "style",
message: "css a variant:",
default: "css",
choices: ["css", "less", "scss"],
loop: true,
},
{
// 选择列表--多选
type: "checkbox",
name: "module",
message: "module a variant:",
default: ["JavaScript"],
choices: ["JavaScript", "TypeScript", "Router", "Vuex", "pinia", "pinia"],
loop: true,
},
]);
console.log("name: ", res);
const bool = existsSync(path.resolve(process.cwd(), "./" + res.name));
if (bool) {
const { ok } = await inquirer.prompt([
{
type: "confirm",
name: "ok",
message: `项目文件(${res.name})已经存在,是否要进行覆盖?`,
default: true,
},
]);
if (!ok) {
// throw `项目文件(${name})已经存在`
console.log(`项目文件(${res.name})已经存在`);
process.exit(0);
}
await rm(path.resolve(process.cwd(), "./" + res.name), {
force: true,
recursive: true,
});
}
console.log("创建项目成功");