Skip to content

commander入门

commander

参数演示

js
#!/usr/bin/env node

const commander = require('commander')
const pkg = require('../package.json')

const { program } = commander;

// 创建一个新的实例
// const program = new commander.Command();

program
    .name(Object.keys(pkg.bin)[0])
    .usage('<command> [options]')
    .version(pkg.version)
    .option('-d, --debug', '是否开启调试模式', false)
    .option('-e, --envName <envName>', '获取环境变量名称');

// command 注册的是当前脚手架下的命令
const clone = program.command('clone <source> [destination]');
clone
    .description('clone a repository')
    .option('-f, --force', '是否强制拷贝')
    .action((source, destination, cmdObj) => {
        console.log('do clone', source, destination, cmdObj.force)
    })

// addCommand 注册子命令
const service = new commander.Command('service')
service
    .command('start [port]')
    .description('start service at some port')
    .action((port) => {
        console.log('do service start', port)
    })
service
    .command('stop')
    .description('stop service')
    .action(() => {
        console.log('do service stop')
    })
program.addCommand(service)

// test-cli install -> vue
program
    .command('install [name]', 'install packages', {
        executableFile: 'vue',
        isDefault: true,  // 默认执行
        hidden: true // 控制台是否隐藏
    })
    .alias('i');

program
    .arguments('<cmd> [options]')
    .description('test command', {
        cmd: 'command to run',
        options: 'options for command'
    })
    .action(function (cmd, options) {
        console.log(cmd, options)
    })

program.parse(process.argv);

// console.log(program._optionValues.debug);
// console.log(program._optionValues.env);

Released under the MIT License.