UNPKG

mj-script

Version:
70 lines (61 loc) 1.83 kB
const { mkdir } = require('../tools/files'); const { getPromiseFunc } = require('../tools/utils'); const { DIR } = require('mj-config/static'); const Generator = require('./Generator'); const ora = require('ora'); const modulesNameArr = [ 'PackageJson', 'RootConfig', 'BabelConfig', 'Dir', ] const callMap = { afterPackageJson: 'callAsync', afterDir: 'callAsync', afterBabelConfig: 'callAsync' } const createGenerator = () => { return new Generator() } const createPlugins = (gen, options) => { options.map(name => { try { require(`./defaultPlugins/${name}`).apply(gen); } catch (e){ const plugin = new (require(`./defaultPlugins/${name}`)); plugin.apply(gen); } }) gen.hooks.afterCreatePlugin.call(); } const doneFunc = async (gen, name) => { const beforeName = `before${name}`; const afterName = `after${name}`; gen.hooks[beforeName] && gen.hooks[beforeName][callMap[beforeName] || 'call'](); return getPromiseFunc(gen[`create${name}`])().then(() => { if (callMap[afterName]) { gen.hooks[afterName][callMap[afterName]](err => { if (err) throw err; }); } else { gen.hooks[afterName].call(); } }) } const modulesLoad = async (options, renameParam) => { const gen = createGenerator(); const rootPath = `${DIR}/${renameParam || 'template'}`; gen.rootPath = rootPath; const spinner = ora({ text: '正在下载', discardStdin: false }).start(); createPlugins(gen, options); gen.hooks.startGenerator.call(); await mkdir(rootPath) modulesNameArr.map(async name => { await doneFunc(gen, name); }) spinner.succeed('下载完成'); } module.exports = modulesLoad;