/* eslint-disable import/no-extraneous-dependencies */ import { argv } from 'yargs'; import webpack from 'webpack'; import WebpackDevServer from 'webpack-dev-server'; import gulp from 'gulp'; import log from 'fancy-log'; import chalk from 'chalk'; import root from './utils/root'; import gulpConfig from './config/gulp'; import webpackConfig from './config/webpack'; function runWebpack({ watch, production, measure, dev, }) { const compiler = webpack(webpackConfig({ watch, production, measure })); if (dev) { const server = new WebpackDevServer(compiler, { compress: true, hot: true, disableHostCheck: true, stats: 'errors-warnings', index: '', proxy: { context: () => true, target: 'http://localhost:2333', }, }); return server.listen(8000); } return new Promise((resolve, reject) => { function compilerCallback(err, stats) { if (err) { console.error(err.stack || err); if (err.details) console.error(err.details); reject(err); } if (argv.detail) console.log(stats.toString()); if (!watch && (!stats || stats.hasErrors())) process.exitCode = 1; resolve(); } if (watch) compiler.watch({}, compilerCallback); else compiler.run(compilerCallback); }); } async function runGulp() { function handleError(err) { log(chalk.red('Error: %s'), chalk.reset(err.toString() + err.stack)); if (err) process.exit(1); } const gulpTasks = gulpConfig({ production: true, errorHandler: handleError }); return new Promise((resolve) => { const taskList = {}; gulp.on('start', ({ uid, name }) => { log(chalk.blue('Starting task: %s'), chalk.reset(name)); taskList[uid] = true; }); gulp.on('stop', ({ uid, name }) => { log(chalk.green('Finished: %s'), chalk.reset(name)); taskList[uid] = false; if (Object.values(taskList).filter((b) => b).length === 0) { resolve(); } }); gulpTasks.default(); }); } async function main() { const dir = process.cwd(); process.chdir(root()); await runGulp(); await runWebpack(argv); process.chdir(dir); } module.exports = main;