1 | var webpack = require("webpack");
|
2 | var argv = require("yargs").argv;
|
3 | var notifier = require("node-notifier");
|
4 | var path = require("path");
|
5 | var fs = require('fs');
|
6 | var _ = require('lodash');
|
7 |
|
8 | var SUB_MODULES = fs.readdirSync('lib/modules')
|
9 | .reduce(function(prev, modName) {
|
10 | var modules = _.extend({}, prev);
|
11 | modules[modName.replace('.js', '')] = './lib/modules/' + modName;
|
12 | return modules;
|
13 | }, {});
|
14 |
|
15 | var SUB_MODULE_EXTERNALS = fs.readdirSync('lib/modules')
|
16 | .reduce(function(prev, modName) {
|
17 | var modules = _.extend({}, prev);
|
18 | modules['./modules/' + modName.replace('.js', '')] = './' + modName;
|
19 | return modules;
|
20 | }, {});
|
21 |
|
22 | var compiler = webpack({
|
23 | entry: _.extend({
|
24 | middleware: './lib/middleware.js',
|
25 | }, SUB_MODULES),
|
26 | output: {
|
27 | path: path.join(__dirname),
|
28 | filename: "[name].js",
|
29 | library: "[name].js",
|
30 | libraryTarget: "umd",
|
31 | },
|
32 | resolve: {
|
33 | extensions: ['', '.js'],
|
34 | },
|
35 | module: {
|
36 | loaders: [
|
37 | {
|
38 | test: /\.js$/,
|
39 | exclude: /node_modules/,
|
40 | loader: 'babel',
|
41 | query: {
|
42 | presets: [
|
43 |
|
44 |
|
45 |
|
46 | ],
|
47 | plugins: [
|
48 | 'check-es2015-constants',
|
49 | 'transform-es2015-arrow-functions',
|
50 | 'transform-es2015-block-scoped-functions',
|
51 | 'transform-es2015-block-scoping',
|
52 | 'transform-es2015-classes',
|
53 | 'transform-es2015-computed-properties',
|
54 | 'transform-es2015-destructuring',
|
55 | 'transform-es2015-duplicate-keys',
|
56 | 'transform-es2015-for-of',
|
57 | 'transform-es2015-function-name',
|
58 | 'transform-es2015-literals',
|
59 | 'transform-es2015-modules-commonjs',
|
60 | 'transform-es2015-object-super',
|
61 | 'transform-es2015-parameters',
|
62 | 'transform-es2015-shorthand-properties',
|
63 | 'transform-es2015-spread',
|
64 | 'transform-es2015-sticky-regex',
|
65 | 'transform-es2015-template-literals',
|
66 | 'transform-es2015-typeof-symbol',
|
67 | 'transform-es2015-unicode-regex',
|
68 |
|
69 | ],
|
70 | },
|
71 | },
|
72 | ],
|
73 | },
|
74 | externals: _.extend({
|
75 | 'lodash/object': 'commonjs lodash/object',
|
76 | }, SUB_MODULE_EXTERNALS),
|
77 | });
|
78 |
|
79 | function formatAsset(asset) {
|
80 | var name = asset.name;
|
81 | var size = asset.size;
|
82 | var sizeStr = size + " B";
|
83 |
|
84 | if (size > 1000) sizeStr = Math.ceil(size / 1000) + " kB";
|
85 | if (size > 1000000) sizeStr = Math.ceil(size / 1000000) + " MB";
|
86 |
|
87 | return name + " [" + sizeStr + "]";
|
88 | }
|
89 |
|
90 | if (argv.watch) {
|
91 | compiler.watch({}, (err, stats) => {
|
92 | if (!err) {
|
93 | console.log(stats.toString({
|
94 | colors: true,
|
95 | chunks: false,
|
96 | version: false,
|
97 | }));
|
98 |
|
99 | var s = stats.toJson();
|
100 |
|
101 | if (s.errors && s.errors.length) {
|
102 | notifier.notify({
|
103 | "title": "ERROR!",
|
104 | "message": "Check the console for errors",
|
105 | });
|
106 | } else {
|
107 | notifier.notify({
|
108 | "title": "Build complete",
|
109 | "message": s.assets.map(formatAsset).join("\n"),
|
110 | });
|
111 | }
|
112 | }
|
113 | });
|
114 | } else {
|
115 | compiler.run(function(err, stats) {
|
116 | console.log(stats.toString({
|
117 | colors: false,
|
118 | chunks: false,
|
119 | version: false,
|
120 | }));
|
121 | });
|
122 | }
|