commander.js 打造自己的CLI

535 阅读1分钟

step 1: mkdir my-cli && cd my-cli && npm init -y

step 2: npm i -S commander

step 3: mkdir bin && mkdir lib

step 4:

// lib/index.js

const { program } = require('commander');
const { resolve } = require('path');
const { spawnSync } = require('child_process');

program
.version('0.01')
.description('My CLI')
.option('-n, --name <name>', 'your name', 'cwy') // <opt> mandatory opt 
.option('-a, --age [age]', 'your name', 'cwy') // [opt] optional opt 


program
.command('create)
.description('create my app')
.argument('<appName>')
.action((appName) => {
    spawnSync('sh', ['-c', `npx create-react-app ${appName} --template typescript`], {
        cwd: process.cwd(),
        stdio: [process.stdin, process.stdout, process.stderr]
    });
    spawnSync('sh', ['-c', 'echo y | npm run eject'], {
        cwd: resolve(process.cwd(), appName),
        stdio: [process.stdin, process.stdout, process.stderr]
    })
})


program.parse(process.argv);

// const options = program.opts();

step 5:

//bin/index.js

#!/user/bin/env node
require('../lib/index');

step 6:

//package.json

"bin": {
    "my-cli": "./bin/index.js" // this cmd will link to node_modules after npm install
}