const fse = require('fs-extra') const { showDir, showExt, moduleTypes } = require('./shared/base.cjs') /** * 自动创建 * @param {import('plop').NodePlopAPI} plop */ function create(plop) { let exist = null let modulePath = null plop.setGenerator('controller', { description: '自动创建', prompts: [ { name: 'type', type: 'list', default: 'component', message: '您希望生成哪种类型的模块?', choices: moduleTypes, }, { name: 'isMarkdown', type: 'confirm', message: '是否 markdown 类型?', default: false, // 如果是 page 类型需要询问是否为 markdown 类型 when({ type }) { return type === 'page' }, }, { name: 'name', type: 'input', message({ type }) { return `请输入 ${type} 的命名` }, }, { name: 'shouldReset', type: 'confirm', default: false, message({ type }) { return `目标 ${type} 已存在,是否重置?` }, // 确认模块是否已存在,是则询问是否重置 when({ type, name, isMarkdown }) { const dir = showDir(type) const ext = showExt(type, isMarkdown) modulePath = `src/${dir}/${name}.${ext}` exist = fse.pathExistsSync(modulePath) if (exist) { return true } }, }, ], actions(answer) { const { type, shouldReset } = answer if (exist && !shouldReset) { throw new Error(`${type} 创建失败`) } return [ { type: 'add', force: true, path: `../${modulePath}`, templateFile: `./template/${type}.hbs`, }, ] }, }) } module.exports = create