@yibancangbai/easy-cli
Version:
简易使用的脚手架工具
72 lines (64 loc) • 1.85 kB
JavaScript
const path = require('path')
const fs = require('fs-extra')
const program = require('commander')
const chalk = require('chalk')
const ora = require('ora')
const create = require('./lib/create')
const process = require('process')
const { windir, HOME, USERPROFILE } = process.env
// 区分windows与mac
let file_path = windir ? USERPROFILE : HOME
// 如果本地没有执行bind命令绑定配置文件,走默认配置
if (!fs.existsSync(`${file_path}/easyConfig.js`)) {
file_path = '.'
}
const templates = require(`${file_path}/easyConfig.js`)
const download = require('./lib/download')
const overwrite = require('./lib/overwrite')
const merge = require('./lib/merge')
const fetch = require('./lib/fetch')
// const { log } = console
program
.version('1.6.2')
program
.command('create <template> <project>')
.description('Generate local project template')
.action(async (templateName, projectName) =>{
try {
const res = await create(projectName)
if (!res) return
const { downloadUrl, name } = templates[templateName]
const sourceDir = path.resolve(name)
const targetDir = path.resolve(projectName || '.')
download(downloadUrl, name, projectName)
switch(res.action) {
case 'overwrite':
overwrite(sourceDir, targetDir, projectName)
break;
case 'merge':
merge(sourceDir, targetDir, name, projectName)
break;
default:
break;
}
} catch (err) {
console.log(`${chalk.cyan(err)}`)
}
})
program
.command('bind <url>')
.description('Fetching remote config file')
.action(async(url) => {
await fetch(url)
})
program
.command('list')
.description('All available templates here')
.action(() => {
for(let key in templates) {
ora(`${chalk.green(key)} ${chalk.cyan(templates[key].description)}`).succeed()
}
})
program
.parse(process.argv)