UNPKG

3.28 kBJavaScriptView Raw
1var webpack = require("webpack");
2var argv = require("yargs").argv;
3var notifier = require("node-notifier");
4var path = require("path");
5var fs = require('fs');
6var _ = require('lodash');
7
8var 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
15var 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
22var 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 // 'es2015',
44 // 'stage-2',
45 // 'react',
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 // 'transform-runtime',
69 ],
70 },
71 },
72 ],
73 },
74 externals: _.extend({
75 'lodash/object': 'commonjs lodash/object',
76 }, SUB_MODULE_EXTERNALS),
77});
78
79function 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
90if (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}