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 | modules['./' + modName.replace('.js', '')] = './' + modName;
|
20 | return modules;
|
21 | }, {});
|
22 |
|
23 | var compiler = webpack({
|
24 | entry: _.extend({
|
25 | platform: './lib/platform.js',
|
26 | }, SUB_MODULES),
|
27 | output: {
|
28 | path: path.join(__dirname),
|
29 | filename: "[name].js",
|
30 | library: "[name].js",
|
31 | libraryTarget: "umd",
|
32 | },
|
33 | resolve: {
|
34 | extensions: ['', '.js'],
|
35 | },
|
36 | module: {
|
37 | loaders: [
|
38 | {
|
39 | test: /\.js$/,
|
40 | exclude: /node_modules/,
|
41 | loader: 'babel',
|
42 | query: {
|
43 | presets: [
|
44 | 'es2015',
|
45 | 'stage-2',
|
46 | 'react',
|
47 | ],
|
48 | plugins: [
|
49 | 'transform-class-properties',
|
50 | ],
|
51 | },
|
52 | },
|
53 | ],
|
54 | },
|
55 | externals: _.extend({
|
56 | 'koa': 'commonjs koa',
|
57 | 'koa-bodyparser': 'commonjs koa-bodyparser',
|
58 | 'koa-router': 'commonjs koa-router',
|
59 | 'koa-static': 'commonjs koa-static',
|
60 | 'react': 'commonjs react',
|
61 | 'react-dom': 'commonjs react-dom',
|
62 | 'react-redux': 'commonjs react-redux',
|
63 | 'redux': 'commonjs redux',
|
64 | 'reselect': 'commonjs reselect',
|
65 | 'lodash/object': 'commonjs lodash/object',
|
66 | 'lodash/lang': 'commonjs lodash/lang',
|
67 | 'path-to-regexp': 'commonjs path-to-regexp',
|
68 | '@r/middleware': 'commonjs @r/middleware',
|
69 | 'chai': 'commonjs chai',
|
70 | 'chai-enzyme': 'commonjs chai-enzyme',
|
71 | 'enzyme': 'commonjs enzyme',
|
72 | 'mocha': 'commonjs mocha',
|
73 | 'react-addons-test-utils': 'commonjs react-addons-test-utils',
|
74 | 'sinon': 'commonjs sinon',
|
75 | 'sinon-chai': 'commonjs sinon-chai',
|
76 | 'child_process': 'commonjs child_process',
|
77 | 'fs': 'commonjs fs',
|
78 | 'path': 'commonjs path',
|
79 | 'babel-core': 'commonjs babel-core',
|
80 | 'jsdom': 'commonjs jsdom',
|
81 | }, SUB_MODULE_EXTERNALS),
|
82 | });
|
83 |
|
84 | function formatAsset(asset) {
|
85 | var name = asset.name;
|
86 | var size = asset.size;
|
87 | var sizeStr = size + " B";
|
88 |
|
89 | if (size > 1000) sizeStr = Math.ceil(size / 1000) + " kB";
|
90 | if (size > 1000000) sizeStr = Math.ceil(size / 1000000) + " MB";
|
91 |
|
92 | return name + " [" + sizeStr + "]";
|
93 | }
|
94 |
|
95 | if (argv.watch) {
|
96 | compiler.watch({}, (err, stats) => {
|
97 | if (!err) {
|
98 | console.log(stats.toString({
|
99 | colors: true,
|
100 | chunks: false,
|
101 | version: false,
|
102 | }));
|
103 |
|
104 | var s = stats.toJson();
|
105 |
|
106 | if (s.errors && s.errors.length) {
|
107 | notifier.notify({
|
108 | "title": "ERROR!",
|
109 | "message": "Check the console for errors",
|
110 | });
|
111 | } else {
|
112 | notifier.notify({
|
113 | "title": "Build complete",
|
114 | "message": s.assets.map(formatAsset).join("\n"),
|
115 | });
|
116 | }
|
117 | }
|
118 | });
|
119 | } else {
|
120 | compiler.run(function(err, stats) {
|
121 | console.log(stats.toString({
|
122 | colors: false,
|
123 | chunks: false,
|
124 | version: false,
|
125 | }));
|
126 | });
|
127 | }
|