闽公网安备 35020302035485号
"bin": {
"yd-cli": "./bin/ydcli"
}
读取并解析命令行参数node app.js a=1 // [ // '/Users/xxx/.nvm/versions/node/v12.4.0/bin/node', // '/Users/xxx/app.js', // 'a=1', // ]但这样获取到的参数是个数组,前两项包含了 node 的安装位置、代码执行路径,所以经常看到的获取参数是process.argv.slice(2)。但直接这样使用还是不够友好,我们可以使用 commander 库来快速处理参数。

#!/usr/bin/env node
const figlet = require("figlet");
const Printer = require("@darkobits/lolcatjs").default;
const program = require("commander");
const inquirer = require("inquirer");
const ora = require("ora");
const shell = require("shelljs");
const text = figlet.textSync("my-cli");
const textColor = Printer.fromString(text);
program.version(textColor);
const hander = {
create: env => {
inquirer
.prompt([
{
type: "list",
name: "jskind",
message: "请选择编程语言",
choices: ["react", "vue", "angular"]
}
])
.then(answers => {
const spinner = ora("正在下载页面模板").start();
console.log(answers);
if (!shell.which("git")) {
shell.echo("Sorry, this script requires git");
shell.exit(1);
} else {
shell.exec("git clone https://github.com/xxx.git");
shell.exec(`sed -i '' -e "s/xxx/${env}/g" ./xxx/package.json`);
// todo 将文件夹的名字替换掉
spinner.stop();
}
});
}
};
program.arguments("<cmd> [env]").action(function(cmd, env) {
if (hander[cmd]) {
hander[cmd](env);
} else {
console.log(`很抱歉,暂未实现该${cmd}命令`);
}
});
// 处理参数入口
program.parse(process.argv);
编写完成之后,执行以下命令