UNPKG

@fuse-oo/cli

Version:

fuse内部脚手架工具

115 lines (99 loc) 4.08 kB
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) }) }