cli

100 阅读1分钟

测试  node bin/***-mini init 

目录

/lib/init.js

const inquirer = require('inquirer');

const chalk = require('chalk');

const exec = require('child_process').exec;

const fs = require('fs');

const path = require('path');

const rimraf = require('rimraf');

const init = () => {

inquirer.prompt([{

type:'list',

name:'miniType',

message: '请选择类型:',

choices: ['A','C'],

},

{

type: 'input',

name: 'app',

suffix: 'mini-',

message: '输入名称:',

validate(value) {

const pass = value && /^(\w+-)?\w+$/.test(value);

if (!pass) {

return chalk.red('应用名称有误:仅支持字母、数字和中划线');

}

return true;

}

}

]).then(({app,miniType}) => {

console.log('miniType='+miniType)

let clientType=(miniType==='c')?'c':'k'

let directory = `mini-clientType{clientType}-{app}`;

if (fs.existsSync(path.resolve(directory))) {

console.log(chalk.red('\n × 当前目录下已存在同名应用,请重新输入 \n'));

init()

} else {

let cmdStr = `git clone https://******git -b v1.5.0 ${directory}`;

console.log(chalk.white('\n 开始创建,请稍后...'));

exec(cmdStr, (error) => {

if (error) {

console.log(error);

process.exit()

}

rimraf(path.resolve(directory, '.git'), (err) => {

if (err) {

console.log(err);

process.exit()

}

console.log(chalk.green('\n √ 创建成功'));

console.log(`\n cd ${directory} && npm install \n`);

process.exit()

});

})

}

})

};

module.exports = init;

/bin/cli.js

#!/usr/bin/env node

const program = require('commander');

program.version(`test-cli ${require('../package').version}`)

.usage('');

program

.command('init')

.description('初始化项目')

.alias('i')

.action(() => {

require('../lib/init')()

});

program.parse(process.argv);

if (!program.args.length) {

program.help()

}