-
Notifications
You must be signed in to change notification settings - Fork 29
/
webpackx.js
69 lines (54 loc) · 1.4 KB
/
webpackx.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import path from 'path';
import { spawn } from 'child_process';
import webpack from 'webpack';
import config, { outputPath, outputFilename } from './webpack/webpack.config';
const compilerRunPromise = compiler =>
new Promise((resolve, reject) => {
compiler.run((err, stats) => {
if (err) {
return reject(err);
}
if (stats && stats.hasErrors()) {
reject(err || stats.toString());
}
resolve(stats);
});
});
const runProgram = () => {
const outputFile = path.join(outputPath, outputFilename);
const program = spawn(process.execPath, [outputFile], {
std: 'inherit',
shell: true,
});
program.stdout.setEncoding('utf8');
program.stdout.on('data', data => {
// eslint-disable-next-line
console.log(data);
});
program.stderr.setEncoding('utf8');
program.stderr.on('data', data => {
// eslint-disable-next-line
console.log(data);
});
program.on('exit', code => {
process.exit(code);
});
};
(async () => {
try {
const wpConfig = {
...config,
entry: path.join(__dirname, process.argv[2]),
};
const compiler = webpack(wpConfig);
const stats = await compilerRunPromise(compiler);
// eslint-disable-next-line
console.log(stats.toString());
runProgram();
} catch (err) {
// eslint-disable-next-line
console.log('err: ', err);
process.exit(1);
}
process.exit(0);
})();