- 使用commander 实现基本的脚手架命令流程;
const commander = require("commander"); const pkg = require("../package.json"); // 手动实例化一个 commander 实例; const program = new commander.Command(); program .name(Object.keys(pkg.bin)[0]) .usage("<command> [options]") .version(pkg.version) .option("-d, --debug", "是否开启调试模式", true) .option("-e, --envName <envName>", "获取环境变量名称") .parse(process.argv)
- 使用 commander 定义单线 命令;
const commander = require("commander"); // 手动实例化一个 commander 实例; const program = new commander.Command(); const clone = program.command("clone <source> [destination]"); clone .description("clone a repository") .option("-f, --force", "是否强制克隆") .action((source, destination, cmdObj) => { console.log("do clone", source, destination); console.log(cmdObj); }); program.parse(process.argv);
- 使用 commander 定义复合命令;
const commander = require("commander"); // 手动实例化一个 commander 实例; const program = new commander.Command(); const service = new commander.Command("service"); service .command("start [port]") .description("start service at some port") .action((port) => { console.log("do service start", port); }); service .command("stop [port]") .description("stop service at some port") .action((port) => { console.log("do service stop", port); }); program.addCommand(service); program.parse(process.argv);
- 使用 commander 实现脚手架的转嫁;
const commander = require("commander"); // 手动实例化一个 commander 实例; const program = new commander.Command(); program .command("install [name]", "install package", { executableFile: "imst-cli", // imst-cli 为其它的脚手架,当前项目脚手架的名称为 igly-test-dev // isDefault: true hidden: true }) .alias("i"); program.parse(process.argv);
- 使用 commander 实现命令缺失的提示;
const commander = require("commander"); // 手动实例化一个 commander 实例; const program = new commander.Command(); program .arguments("<cmd> [options]") .description("test command", { cmd: "command to run", options: "options for command" }) .action((cmd, options) => { console.log(cmd, options); }); program.parse(process.argv);
- 使用 commander 实现高级定制:自定义 hlep信息;
const commander = require("commander"); // 手动实例化一个 commander 实例; const program = new commander.Command(); program.helpInformation = () => ""; program.on("--help", () => { console.log("your help information"); }); program.parse(process.argv);
- 使用 commander 实现高级定制:实现debug模式;
const commander = require("commander"); // 手动实例化一个 commander 实例; const program = new commander.Command(); program.on("option:debug", () => { // console.log("debug"); if(program.opts().debug) { process.env.LOG_LEVEL = "verbose"; } console.log(process.env.LOG_LEVEL); }); program.parse(process.argv);
- 使用 commander 实现高级定制;对未知命令的监听;
const commander = require("commander"); // 手动实例化一个 commander 实例; const program = new commander.Command(); program.on("command:*", (obj) => { console.error("未知命令:" + obj[0]) const availableCommands = program.commands.map((cmd) => cmd.name()); console.log("可用命令:", availableCommands.join(",")); }); program.parse(process.argv);
完整代码如下:
#! /usr/bin/env node const commander = require("commander"); const pkg = require("../package.json"); // 手动实例化一个 commander 实例; const program = new commander.Command(); program .name(Object.keys(pkg.bin)[0]) .usage("<command> [options]") .version(pkg.version) .option("-d, --debug", "是否开启调试模式", true) .option("-e, --envName <envName>", "获取环境变量名称"); const clone = program.command("clone <source> [destination]"); clone .description("clone a repository") .option("-f, --force", "是否强制克隆") .action((source, destination, cmdObj) => { console.log("do clone", source, destination); console.log(cmdObj); }); const service = new commander.Command("service"); service .command("start [port]") .description("start service at some port") .action((port) => { console.log("do service start", port); }); service .command("stop [port]") .description("stop service at some port") .action((port) => { console.log("do service stop", port); }); program.addCommand(service); program .command("install [name]", "install package", { executableFile: "imst-cli", // isDefault: true hidden: true }) .alias("i") // program // .arguments("<cmd> [options]") // .description("test command", { // cmd: "command to run", // options: "options for command" // }) // .action((cmd, options) => { // console.log(cmd, options); // }); // 高级定制1:自定义help信息 // program.helpInformation = () => ""; // program.on("--help", () => { // console.log("your help information"); // }); // 高级定制2:实现debug模式 program.on("option:debug", () => { // console.log("debug"); if(program.opts().debug) { process.env.LOG_LEVEL = "verbose"; } console.log(process.env.LOG_LEVEL); }); //高级定制3:对未知命令的监听 program.on("command:*", (obj) => { console.error("未知命令:" + obj[0]) const availableCommands = program.commands.map((cmd) => cmd.name()); console.log("可用命令:", availableCommands.join(",")); }) program .parse(process.argv);