UNPKG

2.83 kBJavaScriptView Raw
1/**
2 * Module dependencies
3 */
4
5var fs = require('fs');
6var exists = fs.existsSync;
7
8module.exports = function(r, app, opts, NODE_ENV) {
9 var Builder = r('poe-ui-builder');
10 var webpack = r('webpack');
11 if (!Builder) return;
12 var entry = opts.entry;
13 var builder = app.builder = Builder(entry, webpack);
14
15 var es6 = load('babel-loader?optional=runtime&modules=commonStrict&cacheDirectory=' + (opts.assetCache || '/tmp'));
16 var ast2template = load('ast2template-loader?root=' + r.resolve(entry + '/root.js', 'silent'));
17
18 /**
19 * JS
20 */
21
22 builder.addES6 = function(config) {
23 config.loader = es6;
24 builder.module.loaders.push(config);
25 };
26
27 builder.addES6({
28 test: /\.(js)$/,
29 exclude: /node_modules/
30 });
31
32 builder.addES6({
33 test: /\.(js)$/,
34 include: /node_modules\/[^\/]+\/blocks/,
35 });
36
37 builder.resolve.extensions.push('.json');
38 builder.addLoader('json', load('json-loader'));
39
40 /**
41 * Markup
42 */
43
44 builder.resolve.extensions.push('.jade');
45 builder.addLoader('jade', load((NODE_ENV === 'development' ? 'react-component-loader!' : '') + es6 + '!onus-loader!' + ast2template + '!jade2ast-loader'));
46
47 /**
48 * CSS
49 */
50
51 var styleLoader = load('style-loader');
52 builder.addLoader(/\.(ess\?(dynamic|raw))$/, load('ess-loader!' + es6 + '!' + ast2template + '&keyName=false&pass-through=1!ess2ast-loader?urlRequire=1'));
53 builder.addStyle('css', load('css-loader?-minimize'));
54 var essLoaderOpts = NODE_ENV === 'development' ? '?postcss=autoprefixer' : '';
55 builder.addStyle(/\.(ess)$/, load('ess-loader' + essLoaderOpts + '!' + es6 + '!' + ast2template + '&keyName=false&pass-through=1&native-path=1!ess2ast-loader?urlRequire=1'), styleLoader);
56
57 /**
58 * Fonts
59 */
60
61 builder.addLoader('woff', load('url-loader?limit=10000&mimetype=application/font-woff'));
62 builder.addLoader('ttf', load('url-loader?limit=10000&mimetype=application/octet-stream'));
63 builder.addLoader('eot', load('file-loader'));
64
65 /**
66 * Images
67 */
68
69 builder.addImage = function(ext, opts) {
70 opts = opts || {};
71 opts.optimizationLevel = opts.optimizationLevel || parseInt(process.env.PNG_OPTIMIZATION_LEVEL, 10) || 2;
72 var str = NODE_ENV === 'development' || !r.resolve('image-webpack-loader', 'silent') ?
73 'file-loader' :
74 'file-loader!image-webpack-loader?' + JSON.stringify(opts);
75 builder.addLoader(ext, str);
76 };
77
78 builder.addImage('png', {pngquant: {speed: 10, quality: '80'}});
79 builder.addImage('jpg', {progressive: true});
80 builder.addImage('jpeg', {progressive: true});
81 builder.addImage('gif');
82 builder.addImage('svg');
83 builder.addImage('ico');
84
85 function load(str) {
86 return str.split('!').map(function(loader) {
87 var parts = loader.split('?');
88 parts[0] = r.resolve(parts[0], 'warn');
89 return parts.join('?');
90 }).join('!');
91 }
92};