@fuse-oo/cli
Version:
fuse内部脚手架工具
115 lines (99 loc) • 4.08 kB
JavaScript
const chalk = require('chalk')
const path = require('path')
const fs = require('fs-extra')
const nunjucks = require('nunjucks')
const tree = require('tree-node-cli')
const {
log,
error,
done,
clearLog,
logWithSpinner,
stopSpinner,
} = require('./common')
const fileBasePaths = 'vue-sys'
const filePaths = {
page: 'views',
router: 'router',
scss: 'assets/css',
api: 'api',
store: 'store'
}
const tempPath = path.resolve(__dirname, '../../temp/')
const pageTempPath = path.resolve(tempPath, `./vue/${filePaths.page}/index.vue`)
const lessTempPath = path.resolve(tempPath, `./vue/${filePaths.scss}/index.scss`)
const apiTempPath = path.resolve(tempPath, `./vue/${filePaths.api}/index.js`)
const routerTempPath = path.resolve(tempPath, `./vue/${filePaths.router}/index.js`)
const storeTempPath = path.resolve(tempPath, `./vue/${filePaths.store}/index.js`)
async function generatePage(context, {lowerName, upperName, folderName}) {
logWithSpinner(`生成 ${chalk.yellow(`${folderName}/${filePaths.page}/index.vue`)}`)
const ioTemp = await fs.readFile(pageTempPath)
const ioContent = nunjucks.renderString(ioTemp.toString(), { lowerName, upperName })
const _context = `${context}/${filePaths.page}`
// 创建文件夹
await fs.mkdir(_context, { recursive: true })
await fs.writeFile(path.resolve(_context, `./index.vue`), ioContent, {flag: 'a'})
stopSpinner()
}
async function generateScss(context, {lowerName, upperName, folderName}) {
logWithSpinner(`生成 ${chalk.yellow(`${folderName}/${filePaths.scss}/index.scss`)}`)
const ioTemp = await fs.readFile(lessTempPath)
const ioContent = nunjucks.renderString(ioTemp.toString(), { lowerName, upperName })
const _context = `${context}/${filePaths.scss}`
// 创建文件夹
await fs.mkdir(_context, { recursive: true })
await fs.writeFile(path.resolve(_context, `./index.scss`), ioContent, {flag: 'a'})
stopSpinner()
}
async function generateApi(context, {lowerName, upperName, folderName}) {
logWithSpinner(`生成 ${chalk.yellow(`${folderName}/${filePaths.api}/index.js`)}`)
const ioTemp = await fs.readFile(apiTempPath)
const ioContent = nunjucks.renderString(ioTemp.toString(), { lowerName, upperName })
const _context = `${context}/${filePaths.api}`
// 创建文件夹
await fs.mkdir(_context, { recursive: true })
await fs.writeFile(path.resolve(_context, `./index.js`), ioContent, {flag: 'a'})
stopSpinner()
}
async function generateRouter(context, {lowerName, upperName, folderName}) {
logWithSpinner(`生成 ${chalk.yellow(`${folderName}/${filePaths.router}/index.js`)}`)
const ioTemp = await fs.readFile(routerTempPath)
const ioContent = nunjucks.renderString(ioTemp.toString(), { lowerName, upperName })
const _context = `${context}/${filePaths.router}`
// 创建文件夹
await fs.mkdir(_context, { recursive: true })
await fs.writeFile(path.resolve(_context, `./index.js`), ioContent, {flag: 'a'})
stopSpinner()
}
async function generateStore(context, {lowerName, upperName, folderName}) {
logWithSpinner(`生成 ${chalk.yellow(`${folderName}/${filePaths.store}/index.js`)}`)
const ioTemp = await fs.readFile(storeTempPath)
const ioContent = nunjucks.renderString(ioTemp.toString(), { lowerName, upperName })
const _context = `${context}/${filePaths.store}`
// 创建文件夹
await fs.mkdir(_context, { recursive: true })
await fs.writeFile(path.resolve(_context, `./index.js`), ioContent, {flag: 'a'})
stopSpinner()
}
module.exports = (context, nameObj) => {
Promise.all([
generateApi(context, nameObj),
generatePage(context, nameObj),
generateRouter(context, nameObj),
generateScss(context, nameObj),
generateStore(context, nameObj)
]).then(async () => {
await clearLog()
const fileTree = tree(context, {
allFiles: true,
exclude: [/node_modules/],
maxDepth: 4
})
done(`${chalk.green(context)} 创建成功`, '🎉')
log(`${chalk.white(fileTree)}`)
stopSpinner()
}).catch(err => {
stopSpinner(false)
error(err)
})
}