ant-g
Version:
antDesignPro辅助代码生成器
102 lines (88 loc) • 2.75 kB
JavaScript
const fs = require('fs');
const path = require('path');
const chalk = require('chalk');
const mkdirp = require('mkdirp');
const inquirer = require('inquirer');
const clipboardy = require('clipboardy');
const menuOrder={
"init": 10,
"dataStructure": 12,
"dependencies": 20,
"service": 30,
"mock": 40,
"pageConfig": 50,
"pageGenerate": 60,
"exit": 200,
}
const getGenerators=()=> {
let ren= fs
.readdirSync(`${__dirname}/generators`)
.filter(f => !f.startsWith('.'))
.map(f => {
return {
name: `${f.padEnd(25)} - ${chalk.grey(require(`./generators/${f}/meta.json`).description)}`,
value: f,
short: f,
};
});
ren=ren.sort((a,b)=>{
const aOrder=menuOrder[a.value]?menuOrder[a.value]:500;
const bOrder=menuOrder[b.value]?menuOrder[b.value]:500;
return aOrder - bOrder
})
return ren;
}
const generators = getGenerators();
const runGenerator = async (generatorPath, { name = '', cwd = process.cwd(), args = {} }) => {
return new Promise(resolve => {
if (name) {
mkdirp.sync(name);
cwd = path.join(cwd, name);
}
const Generator = require(generatorPath);
const generator = new Generator({
name,
env: {
cwd,
},
resolved: require.resolve(generatorPath),
args,
});
return generator.run(() => {
if (name) {
if (process.platform !== `linux` || process.env.DISPLAY) {
clipboardy.writeSync(`cd ${name}`);
console.log('📋 Copied to clipboard, just use Ctrl+V');
}
}
console.log('✨ File Generate Done');
resolve(true);
process.exit(10)
});
});
};
const run = async config => {
process.send && process.send({ type: 'prompt' });
process.emit('message', { type: 'prompt' });
let { type } = config;
if (!type) {
const answers =
await inquirer.prompt([
{
name: 'type',
message: 'Select the boilerplate type',
type: 'list',
choices: generators,
pageSize:9,
},
]);
type = answers.type;
}
try {
return runGenerator(`./generators/${type}`, config);
} catch(e) {
console.error(chalk.red(`> Generate failed`), e);
process.exit(1);
}
};
module.exports = run;