美文网首页
自制命令行工具

自制命令行工具

作者: lixingyang | 来源:发表于2020-11-07 11:23 被阅读0次

commander模块

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);

搭建本地命令行工具环境:

  1. 在自己的项目文件夹根目录下创建app.js;并添加"#! /usr/bin/env node"代码,改代码表示shebang,定义解释器环境;
  #!/usr/bin/env node
  
  var commander = require('commander');
  commander.version('1.0.1').parse(process.argv) 
  1. 项目根目录建立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"
  };
  1. 此时还无法执行'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
  1. 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);
         })       
  1. version(str) : 定义版本
  commander.version('0.01').parse(process.argv)
  1. description(str) : 定义选项和模块描述
  //--命令模块描述
  commander.option('-0, --optimize')
           .descriptio('optiomze images')

  //--选项描述
  commander.command('release')
           .description('release project')
  1. action(fn) : 匹配相应选项执行函数,接受选项名name和参数列表args;表示必须有该选项,[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"
  1. alias(name) : 定义别名;用于选项;参数定义无效;

  2. allowUnknownOption() : 允许未定义的参数,执行中不报错;

  3. 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 }
  1. outputHelp(fn): 定义hlep输出信息,将覆盖模块内部的输出信息;

  2. help(fn) :其实就是outputHelp和process.exit()的组合;
    转自:https://www.kancloud.cn/diaoyundexia/text/content/commander.md
    参考:https://www.cnblogs.com/Mobro/p/10256333.html

相关文章

网友评论

      本文标题:自制命令行工具

      本文链接:https://www.haomeiwen.com/subject/kzpfbktx.html