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

自制命令行工具

作者: 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