@fuse-oo/cli
Version:
fuse内部脚手架工具
89 lines (75 loc) • 2.12 kB
JavaScript
const chalk = require('chalk')
const EventEmitter = require('events')
const fs = require('fs-extra')
const inquirer = require('inquirer')
const {
log,
error,
logWithSpinner,
clearConsole,
stopSpinner,
clearLog,
exit
} = require('../lib/utils/common')
const { inquirerHtml } = require('./utils/store')
module.exports = class PageCreator extends EventEmitter {
constructor(name, context) {
super()
this.name = name
this.context = context
}
async create(cliOptions = {}) {
const fileNameObj = this.getName()
const {context} = this
await clearLog('cyan', `FUSE-CLI v${require('../package').version}`)
logWithSpinner(`✨`, `开始创建页面 ${chalk.yellow(context)}`)
// 创建文件夹
await fs.mkdir(context, { recursive: true })
this.emit('creation', { event: 'creating' })
stopSpinner()
// 默认 下载 html 对应的模版吗
switch (cliOptions.name) {
case 'html':
await this.createHtml(cliOptions)
break
case 'vue':
const generateVue = require('./utils/generateVue')
await generateVue(context, fileNameObj)
break
default:
await this.createHtml(cliOptions)
break
}
}
// 创建 html 模版
async createHtml(cliOptions) {
const {context} = this
const generateHtml = require('./utils/generateHtml')
if (!cliOptions.default) {
// 一些基础配置
const defaultOpt = await inquirer.prompt(inquirerHtml)
// 合并配置
Object.assign(cliOptions, defaultOpt)
} else {
// 默认配置
Object.assign(cliOptions, {
hasRem: true,
libs: [ 'zepto' ]
})
}
// 动态添加文件
await generateHtml(context, cliOptions)
}
getName() {
const originName = this.name
const tailName = originName.slice(1)
const upperName = originName.charAt(0).toUpperCase() + tailName
const lowerName = originName.charAt(0).toLowerCase() + tailName
const folderName = lowerName + tailName + '-sys'
return {
folderName,
upperName,
lowerName
}
}
}