自定义命令行工具基于Nodejs
每个人都会做一些简单的小工具去方便自己平时的工作,比如批处理文件。写个有界面的工具吧,有点费劲和没必要;如果能在命令行里面敲几个简单命令就能完成,就方便很多了,而我们又是前端开发,基于nodejs,学习的门槛就更低了
一、前期准备
需要下载两个node的插件
- liftoff (执行命令行插件)
- minimist (读取命令行参数插件)
二、文件夹结构
需要将文件内容保存在指定文件夹才有效:windows用户一般为在C:\Users\用户名\AppData\Roaming\npm
    npm
    |--hello.cwd  //windows下的命令入口文件(自定义的命令)
    |--node_modules  //nodejs的全局插件保存目录
    |    |--hello    //hello命令插件的目录
    |    |    |--hello.js  //hello命令的代码实现文件
    |    |    |--node_modules  //命令行工具依赖的两个插件包
    |    |    |    |--liftoff
    |    |    |    |--minimist
hello.cwd文件
    @IF EXIST "%~dp0\node.exe" (
      "%~dp0\node.exe"  "%~dp0\node_modules\hello\hello.js" %*
    ) ELSE (
      node  "%~dp0\node_modules\hello\hello.js" %*
    )
假设我们的命令行名字叫:hello,可以看出其实最终是用node命令执行我们的hello.js
hello.js
    //加载引用命令工具的第三方插件包
    var Liftoff = require('liftoff');
    var argv = require('minimist')(process.argv.slice(2));
    
    //实例化一个命令行工具
    var cli = new Liftoff({
      name: 'hello', // 命令名字
      processTitle: 'hello', //同上即可
      moduleName: 'hello', //同上即可
      configName: 'hello-conf', //配置文件名称
    
      // 设置为支持js后缀
      extensions: {
        '.js': null
      }
    });
    
    //启动命令
    cli.launch({
      cwd: argv.r || argv.root, //当前输入hello命令的目录
      configPath: argv.f || argv.file //读取当前命令目录下的配置文件路径
    }, function(env) {
    
      //捕获命令行
      var command = argv["_"];
    
      console.log(env.cwd);
      console.log(env.configPath);
    });
就这样一个简单的工具就完成了,就可以在CMD命令任意地方输入:hello
三、测试实验
假设我们在D盘下,而且我们D盘存在hello-conf.js配置文件,执行命令
    d:\> hello check --yousay haha
此时如何获得以上命令中的参数?
    //在启动命令的回调中,可以这样获取
    env.cwd  //输出:D:\
    env.configPath //输出:D:\hello-conf.js
    argv["_"][0]  //输出:check
    argv.yousay  //输出:haha
有这些参数后,就可以定义很多不同的hello命令处理了,比如读取当前文件夹下所有图片,然后进行压缩,再生出新的图片等等
PS:小组的feg命令也就是这样诞生的了
手机阅读请扫描下方二维码:
前辈您好,晚辈有事请教可否回邮
1
555
1
1
1
1
1
1
1
1
1
1
1
1
1
1
12345678 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
555
555
555
xdhgygszcnzqdyuekhgv
12345678 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
12345678 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
1
12345678 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
12345678 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
12345678 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   'and/**/extractvalue(1,concat(char(126),md5(1224859183)))and'
 'and/**/extractvalue(1,concat(char(126),md5(1224859183)))and'
12345678 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   "and/**/extractvalue(1,concat(char(126),md5(1618104583)))and"
 "and/**/extractvalue(1,concat(char(126),md5(1618104583)))and"
extractvalue(1,concat(char(126),md5(1856374166)))
12345678 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   'and(select'1'from//cast(md5(1041258679)as//int))>'0
 'and(select'1'from//cast(md5(1041258679)as//int))>'0
1 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
1 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
1 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
1 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
1 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
1
1 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
1 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
1
1
1
1
555
1
1
1
555
1
1 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
1 
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
  
1
1
555
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1