import * as rimraf from 'rimraf'; import * as path from 'path'; const Task = require('../ember-cli/lib/models/task'); import * as webpack from 'webpack'; import { BuildTaskOptions } from '../commands/build'; import { NgCliWebpackConfig } from '../models/webpack-config'; import { getWebpackStatsConfig } from '../models/webpack-configs/utils'; import { CliConfig } from '../models/config'; export default Task.extend({ run: function (runTaskOptions: BuildTaskOptions) { const project = this.cliProject; const outputPath = runTaskOptions.outputPath || CliConfig.fromProject().config.apps[0].outDir; rimraf.sync(path.resolve(project.root, outputPath)); const webpackConfig = new NgCliWebpackConfig(runTaskOptions).config; const webpackCompiler = webpack(webpackConfig); const statsConfig = getWebpackStatsConfig(runTaskOptions.verbose); return new Promise((resolve, reject) => { const callback: webpack.compiler.CompilerCallback = (err, stats) => { if (err) { return reject(err); } this.ui.writeLine(stats.toString(statsConfig)); if (runTaskOptions.watch) { return; } if (stats.hasErrors()) { reject(); } else { resolve(); } }; if (runTaskOptions.watch) { webpackCompiler.watch({}, callback); } else { webpackCompiler.run(callback); } }) .catch((err: Error) => { if (err) { this.ui.writeError('\nAn error occured during the build:\n' + ((err && err.stack) || err)); } throw err; }); } });