UNPKG

3.35 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 modules['./' + modName.replace('.js', '')] = './' + modName;
20 return modules;
21 }, {});
22
23var 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
84function 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
95if (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}