🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>commander模块用来制作命令行交互;一般命令行包含:命令,选项,参数:'fis3 release --optimize';官网实例: #!/usr/bin/env node var commander = require('commander'); commander.version('0.0.1') .command('rmdir <dir> [otherDirs...]') .action(function (dir, otherDirs) { console.log('rmdir %s', dir); if (otherDirs) { otherDirs.forEach(function (oDir) { console.log('rmdir %s', oDir); }); } }); commander.parse(process.argv); >搭建本地命令行工具环境: * 在自己的项目文件夹根目录下创建app.js;并添加"#! /usr/bin/env node"代码,改代码表示shebang,定义解释器环境; #!/usr/bin/env node var commander = require('commander'); commander.version('1.0.1').parse(process.argv) * 项目根目录建立package.json文件,并添加下面的字段值; { "name": "comm", "version": "1.0.0", "description": "", "main": "app.js", "dependencies": { "commander": "^2.9.0", }, "bin": { "poet": "app.js" }, //--加上这行字段信息,其他字段可以使用npm初始化的默认值 "devDependencies": {}, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "license": "ISC" }; * 此时还无法执行'poet -version'命令;提示poet不是内部命令;'node app.js'提示语法错误;js不支持‘"#! /usr/bin/env node’字符;怎么办? 安装到nodejs的全局模块中去 npm install . -g //--安装到全局模块 npm link //--创建硬链接; poet -v //--输出定义的版本信息‘1.0.1’; >commander中的方法: * option(flag,description):命令参数 //--命令参数 var commander = require('commander') commander.option('-o,--optimize','optimize text') .parse(process.argv); if(commander.optimize){ console.log('optimize exist') }; 命令行: poet -o || poet --optimize 输出: optimize exist * command(name,description) : 定义选项;name作为参数传入action函数中; #!/usr/bin/env node var commander = require('commander') commander.command('releasse') .description('des') //--定义描述 .alias('rl') //---定义别名 .action(function (name,args){ //---匹配到命令时执行的业务函数,参数:选项名和选项参数 console.log(name,args); }) * version(str) : 定义版本 commander.version('0.01').parse(process.argv) * description(str) : 定义选项和模块描述 //--命令模块描述 commander.option('-0, --optimize') .descriptio('optiomze images') //--选项描述 commander.command('release') .description('release project') * action(fn) : 匹配相应选项执行函数,接受选项名name和参数列表args;<name>表示必须有该选项,[name...]表示可选选项 #!/usr/bin/env node var commander = require('commander') commander.command('lists <name> [books...]') .description('run lists commands') .action(function(name, books) { console.log('name "%s"', name); if (books) { books.forEach(function (book) { console.log('book "%s"', book); }); } }); commander.parse(process.argv) //--命令行输入: poet lists libai jingyesi zengwanglun //--输出 name "libai" book "jingyesi" book "guanluori" * alias(name) : 定义别名;用于选项;参数定义无效; * allowUnknownOption() : 允许未定义的参数,执行中不报错; * otps(): 返回options的键值对表示的对象 #!/usr/bin/env node var commander = require('commander') commander.option('--optimize') .option('--age','age') .parse(process.argv); if(commander.optimize){ console.log('optinize') console.log(commander.opts()) } 命令行: poet --optimize optinize { optimize: true, age: undefined } * outputHelp(fn): 定义hlep输出信息,将覆盖模块内部的输出信息; * help(fn) :其实就是outputHelp和process.exit()的组合;