简介
cm(Commander)是一个轻量级的Node.js命令行界面(CLI)工具,可帮助我们以一种更简洁和优雅的方式实现命令行界面的功能。即使没有什么NodeJS经验,使用cm也非常简单。
安装
cm包安装非常简单,我们只需要在命令行中使用npm安装即可:
npm install commander
基础命令
要创建一个简单的命令行界面,我们可以通过以下方式定义基础命令:
const { Command } = require('commander'); const program = new Command(); program .version('1.0.0') .description('This is my command line interface') .parse(process.argv);
version()
用于定义版本。description()
定义命令行的描述。parse()
用于解析命令行参数并执行该命令。
运行node app --version
即可查看版本号。
参数
让我们看看如何添加参数到我们的命令行:
program .command('hello <name>') .description('output a greeting with a given name') .action((name) => { console.log(`Hello ${name}`); });
command()
是定义命令行的常用方法,就像上面的hello。<name>
是必需的参数,尖括号表示必需。description()
定义参数的描述。
运行node app hello John
,输出Hello John
。
选项
现在,我们来看一下如何为我们的命令添加选项:
program .option('-f, --file <filename>', 'output file name') .command('hello <name>') .description('output a greeting with a given name') .action((name) => { const filename = program.file || 'default.txt'; console.log(`Hello ${name}, write output to ${filename}`); });
option()
是定义选项的常用方法。-f, --file
是指定选项的简写和全称。<filename>
是选项的值,可以使用program.file
获取它。write output to ${filename}
是输出选项值。
运行node app hello John --file output.txt
,输出Hello John, write output to output.txt
。
高级定义
在实施复杂命令时,可以采用链式编程方法,使用更丰富的选项以及像下面这样的子命令:
-- -------------------- ---- ------- ------- ------------ --------- ------- ----- ----------- --------------- -------- --------------- ------------------- - ---------- ---- - ----- ------- ----------- ------------ -------- ---------- ------- -- -- -------- ---------------- ------------ - ------ ------ -- -- - ------------------ ------- --------- ---------------------- -------- --------------------------- ------------- ---------------------- -------- -- ------- ------------------ ----- ---
clone
是带有子命令的主命令。<source>
是必需的参数。[destination]
是可选的参数。方括号表示可选。-b, --branch
是允许克隆不同分支的选项。action
是命令将执行的操作。
运行node app clone repo.git dest -b branch --debug
,输出:
clone command called source: repo.git destination: dest branch: branch DEBUG ON
结论
cm是一个非常好的Node.js库,可以尽可能地简化您的控制台界面代码。使用任何库时,应该思考其实际用途并尽可能少地实施它,同时应当注意与其他库的兼容性以及与您的框架的兼容性。仅仅依靠一种库并不意味着你得到了一切 - 您的实现应该仅是提供用于您的应用程序的最佳工具之一。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/77934