每天一个nodejs模块-cli相关

334 阅读2分钟

这是我参与更文挑战的第5天,活动详情查看: 更文挑战

前言

今天,我们开始更新cli相关的模块,前期会将这些模块一个一个讲清楚,在最后的时候对所有模块进行整合,用来支撑我们进行cli工具的开发,今天先将最常用模块Commander.js模块,具体的中文文档地址

Commander模块是什么

Commander模块是一个第三方模块,意味着我们需要通过npm包进行下载,他提供给了我们开箱即用的脚手架命令,极大的简化了我们的开发,接下来我们就来先做一个最简单的例子带领大家领略一下:

const program = require('commander');
program.version('0.0.1', '-v, --version').parse(process.argv);
// shell
node ./20210612/1.js -v
output: 0.0.1

如上所述:version方法提供我们查看当前脚手架版本的方法,还有几个常用方法如下:

option方法

使用option方法定义commander选项的options,具体参数解析规则如下:

  1. 自定义标志,指具体参数后传入的参数名称,中间可以用逗号,竖线或者空格分割,标志后面可跟可选参数和必须参数,前者用[]包含,后者用<>包含
  2. 选项描述,省略不报错,用于--help时展示
const {program} = require('commander')
program
.option('-p, --process <type>', 'this is process')
program.parse(process.argv);
const options = program.opts();
console.log(options); //{ process: '1' }

command

用来添加命令名称,主要涉及定义命令名称,命令描述,以及配置选项,具体如下

const {program} = require('commander')
program
  .command('clone <source> [destination]')
  .description('clone a repository into a newly created directory')

action

command函数一般搭配action函数实现,action函数接收一个函数,函数中的参数就是command中定义的参数,我们通过这种匹配方式可以做很多事情,具体如下:

const {program} = require('commander')
program
  .command('clone <source> [destination]')
  .description('clone a repository into a newly created directory')
  .action(require('./clone.js'));
program.parse(process.argv);
// clone.js
module.exports = (target, desc) => {
    console.log(target, desc)
    const {spawn} = require('child_process');
    target = require('path').resolve(__dirname, target)
    desc = require('path').resolve(__dirname, desc)
    const child = spawn('cp', ['-r', target, desc]);
    child.stdout.pipe(process.stdout);
    child.stderr.pipe(process.stderr);
}

如上,我们根据action接收参数,执行了clone的克隆操作,文件复制成功

结语

以上就是今天的全部内容了,谢谢大家