Node 命令行工具 commander.js 快速上手
2021/11/29 20:40:02
本文主要是介绍Node 命令行工具 commander.js 快速上手,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
完整的 node.js 命令行解决方案。
tj/commander.js: node.js command-line interfaces made easy
中文文档
1 只使用 option
这个是最简单和好理解的,直接使用看官方的例子即可:
commander.js/options-common.js at master · tj/commander.js
program .option('-d, --debug', 'output extra debugging') .option('-s, --small', 'small pizza size') .option('-p, --pizza-type <type>', 'flavour of pizza');
如果没有指定参数,则 option 默认是 boolean 类型,默认为 undefined,指定了就是 true。
以下演示中,默认使用如下代码模板,并且主命令假设为 foo
const { Command } = require("commander"); const program = new Command(); // code,这里是不同的演示代码 program.parse();
2 使用 argument
这里是命令的参数,调用形式上和 command 有点像,但是不同的东西。
program .version("0.1.0") .argument("<username>", "user to login") .argument("[password]", "password for user, if required", "no password given") .description("example program for argument") .action((username, password) => { console.log("username:", username); console.log("password:", password); }); program .version("0.1.0") .arguments("<username> [password]") .description("test command") .action((username, password) => { console.log("username:", username); console.log("password:", password || "no password given"); });
调用形式就是 foo my-name my-password
3 argument 和 option
program .version("0.1.0") .argument("<username>", "user to login") .argument("[password]", "password for user, if required", "no password given") .option("-c, --check", "check option") .option("-C, --no-check", "no check option") .option("-o, --output <output>", "output options", "./temp") .description("example program for argument") .action((username, password, options) => { console.log("username:", username); console.log("password:", password); console.log(options); });
调用形式就是 foo my-name my-password -C -o "/temp"
这里使用了取反 option --no-check
,当指定 -C
或者 --no-check
时,option 中的 check 为 false。(没有名为 no-check 的选项,控制的都是 check 选项的值)
即:check 选项一共有三种值,不指定:undefined, -c/--check:true,-C/--no-check:false。
4 command 和 option
program .command("join") .option("-c, --check", "check option") .option("-o, --output <output>", "output options", "./temp") .description("example program for command") .action((options, command) => { console.log(options); });
调用形式:foo join -c -o "\temp"
这里的 join 是子命令,形式上和 argument 很像,但语义上不一样,需要根据实际业务选择不同的实现方式。
5 command 和 argument 和 option
program .version("0.1.1") .command("join") .argument("<env>", "environment") .argument("[second]", "second command") .option("-c, --check", "check option") .option("-o, --output <output>", "output options", "./temp") .description("example program for command") .action((env, second, options, command) => { console.log(env); console.log(second); console.log(options); });
调用形式:foo join my-env my-second-argument -c --output "./temp"
6 command 和 可变参数 和 option
program .version("0.1.1") .command("join") .argument("<env>", "environment") .argument("<str...>", "string list") .option("-c, --check", "check option") .description("example program for variadic argument ") .action((env, str, options, command) => { console.log(env); console.log(str); console.log(options); });
调用形式 foo join my-env s1 s2 s3 s4 -c
这里 s1 s2 s3 s4 都会放到 str 数组中
7 command 使用独立的处理文件
program .version("0.1.0") .command("install [name]", "install one or more packages") // index-install .command("search [query]", "search with optional query", { executableFile: "mySearchSubCommand", }) .command("list", "list packages installed", { isDefault: true });
如果没有指定文件名,则使用 当前文件名-command 的形式查找处理文件,否则报错,如这里的 install 子命令。
如果指定了文件名,则使用指定的文件名(相对路径),如这里的 search 子命令。
具体执行文件中怎么写呢?其实就是一个新的命令行解析处理。
如下,同样可以继续使用 command argument option
const { Command } = require('commander'); const program = new Command(); program .argument("<abc>") .option('--ignore-case', 'ignore case',false) .action((abc,options,command)=>{ console.log("action",abc); console.log("action",options); console.log("action",command.args); }); program.parse(process.argv); const arguments = program.args; const options = program.opts(); console.log("@",arguments); console.log("@",options); console.log("@",program.processedArgs);
8 异步处理
上面的模板说明中,使用的是同步处理方式(program.parse()
),如果需要异步处理,则使用 await program.parseAsync(process.argv)
async function run() { /* code goes here */ } async function main() { program.command("run").action(run); await program.parseAsync(process.argv); }
示例代码
JasonGrass/git-command-helper
其它
github social image generate
Github Social Image Generator - Bannerbear
原文链接:https://www.cnblogs.com/jasongrass/p/15620575.html
这篇关于Node 命令行工具 commander.js 快速上手的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15基于JSON的大型语言模型代理与Ollama及LangChain的应用
- 2024-11-15useCallback教程:React Hook入门与实践
- 2024-11-15React中使用useContext开发:初学者指南
- 2024-11-15拖拽排序js案例详解:新手入门教程
- 2024-11-15React中的自定义Hooks案例详解
- 2024-11-14受控组件项目实战:从零开始打造你的第一个React项目
- 2024-11-14React中useEffect开发入门教程
- 2024-11-14React中的useMemo教程:从入门到实践
- 2024-11-14useReducer开发入门教程:轻松掌握React中的useReducer
- 2024-11-14useRef开发入门教程:轻松掌握React中的useRef用法