UNPKG

2.17 kBJavaScriptView Raw
1/* eslint-disable */
2
3var webpack = require('webpack');
4var notifier = require('node-notifier');
5var _ = require('lodash');
6var fs = require('fs');
7var colors = require('colors');
8
9const nodeEnv = process.env.NODE_ENV || 'development';
10
11module.exports = function(config, cb) {
12 if (!cb) { cb = function() {}; }
13
14 var builds = config.builds.slice();
15
16 // Run each build serially so the server can do things like read an app
17 // manifest file that's genrated during the client build step.
18 var runNextBuild = function() {
19 if (!builds.length) { return; } // this shouldn't happen
20
21 var build = builds.shift();
22 var buildCallback = builds.length ? runNextBuild : cb;
23 console.log(colors.cyan('[Starting build]'), build.buildName);
24 executeBuild(build, buildCallback);
25 };
26
27 runNextBuild();
28}
29
30function executeBuild(build, cb) {
31 var compiler = webpack(build.webpackConfig);
32 if (build.watch) {
33 compiler.watch({}, function(err, stats) {
34 outputBuild(build.buildName)(err, stats);
35 cb(stats.toJson());
36 });
37 } else {
38 compiler.run(function(err, stats) {
39 console.log(stats.toString({
40 colors: !build.disableColors,
41 chunks: false,
42 version: false,
43 children: false,
44 }));
45 cb(stats.toJson());
46 });
47 }
48}
49
50function formatAsset(asset) {
51 var name = asset.name;
52 var size = asset.size;
53 var sizeStr = size + " B";
54
55 if (size > 1000) sizeStr = Math.ceil(size / 1000) + " kB";
56 if (size > 1000000) sizeStr = Math.ceil(size / 1000000) + " MB";
57
58 return name + " [" + sizeStr + "]";
59}
60
61function outputBuild(type) {
62 return function(err, stats) {
63 if (!err) {
64 console.log(stats.toString({
65 colors: true,
66 chunks: false,
67 version: false,
68 children: false,
69 }));
70
71 var s = stats.toJson();
72
73 if (s.errors && s.errors.length) {
74 notifier.notify({
75 "title": type + " – ERROR!",
76 "message": "Check the console for errors",
77 });
78 } else {
79 notifier.notify({
80 "title": type + " – Build complete",
81 "message": s.assets.map(formatAsset).join("\n"),
82 });
83 }
84 }
85 }
86}