91admin-cli
Version:
A simple CLI for creating your projects from own Git server
77 lines (68 loc) • 1.99 kB
JavaScript
const { prompt } = require('inquirer')
const { writeFile } = require('fs')
const { listTable } = require(`${__dirname}/../utils`)
const { resolve } = require('path')
const chalk = require('chalk')
const download = require('download-git-repo')
const ora = require('ora')
// var spawn = require('child_process').spawn;
const spawn = require('cross-spawn');
let tplList = require(`${__dirname}/../templates`)
const question = [
{
type: 'input',
name: 'name',
message: '脚手架名称:',
validate (val) {
if (tplList[val]) {
return true
} else if (val === '') {
return '名字不能为空'
} else if (!tplList[val]) {
return '该脚手架不存在.'
}
}
},
{
type: 'input',
name: 'project',
message: '项目名称:',
validate (val) {
if (val !== '') {
return true
}
return '项目名称不能为空!'
}
},
{
type: 'input',
name: 'place',
message: '项目所在目录:',
default: './'
}
]
module.exports = prompt(question).then(({ name, project, place }) => {
const gitPlace = tplList[name]['owner/name']
const gitBranch = tplList[name]['branch']
const gitClone = tplList[name]['clone']
const spinner = ora('Downloading... ')
spinner.start()
download(`direct:${gitPlace}#${gitBranch}`, `${place}/${project}`, {clone: true}, (err) => {
if (err) {
console.log(chalk.red(err))
process.exit()
}
var process = spawn('yarn', [], {cwd: `${place}/${project}`});
process.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
process.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
process.on('close', function (status) {
if (status != 0) console.log(chalk.red((new Error("'npm install' failed with status, please exec 'npm install' again " + status))))
spinner.stop()
console.log(chalk.green('项目创建成功!'))
});
})
})