-
Notifications
You must be signed in to change notification settings - Fork 1
/
webpack.config.js
136 lines (122 loc) · 4.73 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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
var webpack = require('webpack');
var ZipBundlePlugin = require('./webpack_plugins/bundle_zip_plugin.js');
var dependency_loader = require('./webpack_plugins/dependencies_loader.js');
module.exports = {
devtool: 'source-map',
entry: {
'app': [
'webpack-dev-server/client?http://localhost:8080', // WebpackDevServer host and port
'webpack/hot/only-dev-server', // "only" prevents reload on syntax errors
'bootstrap-loader', //Loads Twitter Bootstrap
'./index.jsx' // Appʼs entry point
],
'js/visor': './core/visor_entrypoint.es6',
},
module: {
preLoaders: [
{
test: /\.(es6|jsx|js)$/,
exclude: [/node_modules/, /jquery.jsPlumb-1.4.1-all-min.js/],
loader: 'jshint-loader'
}
],
loaders: [
{
test: /\.es6$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['es2015'],
plugins: ['transform-object-rest-spread']
}
},
{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: 'react-hot-loader/webpack!babel-loader?presets[]=es2015,presets[]=react'
},
{
test: /\.css$/,
exclude: /node_modules/,
loader: 'style-loader!css-loader'
},
{
test: /\.scss$/,
exclude: /node_modules/,
loader: 'style-loader!css-loader!sass-loader'
},
{
test: /\.(jpg|gif|png)$/,
loader: 'url-loader?limit=100000'
},
{
test: /\.(woff2?|svg)$/,
loader: 'url-loader?limit=10000' },
{
test: /\.(ttf|eot)$/,
loader: 'file-loader'
},
{
test: /\.json$/,
loader: 'json-loader'
},
{
test: require.resolve('jquery'),
loader: 'expose?jQuery!expose?$!expose?window.jQuery' //expose-loader, exposes as global variable
}
].concat(dependency_loader.getExposeString())
},
resolve: {
extensions: ['', '.js', '.jsx', '.es6']
},
output: {
path: './dist',
publicPath: '/', //This is used to generate URLs to e.g. images
filename: '[name]-bundle.js'
},
devServer: {
contentBase: './dist',
hot: true
},
jshint: {
// http://www.jshint.com/docs/options/
// This option prohibits the use of bitwise operators such as ^ (XOR), | (OR) and others.
// Bitwise operators are very rare in JavaScript programs and quite often & is simply a mistyped &&
bitwise: true,
// This option requires you to always put curly braces around blocks in loops and conditionals
curly: true,
// This options prohibits the use of == and != in favor of === and !==
eqeqeq: true,
// This option is used to specify the ECMAScript version to which the code must adhere
esversion: 6,
// This option requires all for in loops to filter object's items. The for in statement
// allows for looping through the names of all of the properties of an object including
// those inherited through the prototype chain.
//forin: true,
//This options prohibits overwriting prototypes of native objects such as Array, Date and so on.
freeze: true,
// This option requires the code to run in ECMAScript 5's strict mode.
//strict: true,
// This option prohibits the use of explicitly undeclared variables.
undef: true,
// This option warns when you define and never use your variables.
unused: false,
// This option suppresses warnings about functions inside of loops.
loopfunc: true,
// These options let JSHint know about some pre-defined global variables
browser: true,
devel: true,
jquery: true,
predef: ["Dali", "html2json", "CKEDITOR", "EJS"].concat(dependency_loader.getJSHintExludeNames())
},
plugins: [
new webpack.ContextReplacementPlugin(/package\.json$/, "./plugins/"),
new webpack.HotModuleReplacementPlugin(),
new webpack.ProvidePlugin(Object.assign({
'$': 'jquery',
'jQuery': 'jquery',
'window.jQuery': 'jquery'
}, dependency_loader.getPluginProvider())), // Wraps module with variable and injects wherever it's needed
new ZipBundlePlugin() // Compile automatically zips
]
};