测试 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-{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()
}