cogear
Version:
Cogear.JS ā modern static websites generator (Node.JS/Webpack)
72 lines (69 loc) ⢠2.17 kB
JavaScript
const ora = require('ora');
const path = require('path');
const fs = require('fs');
const fse = require('fs-extra');
const prettyMs = require('pretty-ms');
const inquirer = require('inquirer');
const chalk = require('chalk');
const now = require('performance-now');
const {forEach} = require('p-iteration');
module.exports = {
apply(){
cogear.on('generators.site',async()=>{
await this.generate();
});
},
async generate(){
let start,
sitename,
sitepath,
loader,
answers;
if(cogear.options._[1]){
sitename = cogear.options._[1];
}
else {
let questions = require('./questions/site.js')();
try {
answers = await inquirer.prompt(questions);
} catch (e) { console.error(e.message); }
sitename = answers.sitename;
}
sitename = sitename.toLowerCase().replace(/[^a-z\._-]/,'');
sitepath = path.join(process.cwd(),sitename);
start = now();
loader = ora('Crafting new site...').start();
if(fs.existsSync(sitepath)){
loader.fail(`Target directory exists.
${chalk.yellow('Try to change site name or remove the directory.')}
`);
}
fse.ensureDirSync(sitepath);
await forEach([
path.join(cogear.baseDir,'lib','plugins','generators','templates','site','src'),
path.join(cogear.baseDir,'lib','plugins','generators','templates','site','config.yaml'),
path.join(cogear.baseDir,'lib','plugins','generators','templates','site','themes')
// path.join(cogear.baseDir,'.gitignore')
],(dirfile)=>{
try {
fse.copySync(
dirfile,
path.join(
sitepath,
path.basename(dirfile)
)
);
} catch (err) {
console.error(err);
}
});
loader.succeed(`New site is crafted in ${prettyMs(now() - start)}.\n
š” ${chalk.underline.whiteBright('Next steps:')}
${chalk.bold('1.')} Open dir:
> cd ${chalk.bold('./'+sitename)}
${chalk.bold('2.')} Run in development mode (w/hot-reload):
> ${chalk.bold('cogear')}
${chalk.bold('3.')} Site will be opened in browser after build is done.
š Read the docs: https://cogearjs.org/docs`);
}
};