-
Notifications
You must be signed in to change notification settings - Fork 0
/
webpack.config.js
91 lines (73 loc) · 1.45 KB
/
webpack.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/**
* Webpack build-system configuration
*/
'use strict';
module.exports = (() => {
const {
CommonsChunkPlugin,
UglifyJsPlugin,
DedupePlugin,
} = require('webpack').optimize;
const config = {};
config.entry = {
app: './src/main.ts',
common: './src/vendor.ts',
};
config.output = {
path: `${__dirname}/dist/`,
filename: '[name].js',
chunkFilename: '[name].chunk[id].js',
};
config.resolve = {
root: `${__dirname}/src/`,
extensions: ['', '.ts', '.js', '.pug', '.scss'],
};
config.devtool = 'source-map';
config.module = {
loaders: [
{
test: /\.component\.ts$/,
loader: 'ts!ng2-component',
},
{
test: /\.ts$/,
loader: 'ts',
exclude: [
/\.component\.ts$/,
/node_modules/,
],
},
{
test: /\.pug$/,
loader: 'pug-html',
},
{
test: /\.scss$/,
loader: 'raw!sass',
},
],
};
config.plugins = [
new CommonsChunkPlugin({
name: ['common'],
filename: '[name].js',
}),
];
if (inProduction()) { // prod-only plugins
config.plugins.push(new UglifyJsPlugin({
compress: {warnings: false},
}));
config.plugins.push(new DedupePlugin());
}
// ts-loader configuration
config.ts = {
silent: true,
};
// do not watch in production
// config.watch = !inProduction();
config.inProduction = inProduction;
return config;
}).call(global);
function inProduction(env = process.env.NODE_ENV || 'dev') {
return Boolean(String(env).match(/^prod(uction)?$/i));
}