-
Notifications
You must be signed in to change notification settings - Fork 12
/
webpack.config.js
119 lines (115 loc) · 3.02 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
const path = require('path');
const webpack = require('webpack');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const MinifyPlugin = require('babel-minify-webpack-plugin');
const IS_PRODUCTION = process.env.NODE_ENV === 'production';
const DIST_DIR = path.resolve(__dirname, 'dist');
const SRC_DIR = path.resolve(__dirname, 'src');
const ASSET_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'eot', 'otf', 'svg', 'ttf', 'woff', 'woff2'];
const MANIFEST_FILE = 'manifest.json';
const manifestPath = path.join(SRC_DIR, MANIFEST_FILE);
module.exports = {
output: {
filename: MANIFEST_FILE,
path: DIST_DIR,
},
entry: manifestPath,
module: {
rules: [
{
test: /\.html$/,
use: [
'file-loader',
'extract-loader',
{
loader: 'html-loader',
options: {
minimize: IS_PRODUCTION,
attrs: [
'link:href',
'script:src',
'img:src'
]
}
}
]
},
{
test: /\.css$/,
use: [
'file-loader',
'extract-loader',
{
loader: 'css-loader',
options: {
minimize: IS_PRODUCTION
}
}
]
},
{
test: /\/index\.js$/,
exclude: /(node_modules|bower_components)/,
use: [{
loader: 'spawn-loader',
options: {
name: '[hash].js'
}
}]
},
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: [
{
loader: 'babel-loader',
options: {
presets: [
['env', { modules: false }]
]
}
},
// Ensure babel-polyfill is imported
// Normally, this would just be an entry point, but relying on
// spawn-loader is preventing us from doing that.
{
loader: 'imports-loader',
query: '__babelPolyfill=babel-polyfill'
}
]
},
{
test: new RegExp('\.(' + ASSET_EXTENSIONS.join('|') + ')$'),
use: {
loader: 'file-loader',
options: {
outputPath: 'assets/'
}
}
},
{
test: manifestPath,
use: ExtractTextPlugin.extract([
'raw-loader',
'extricate-loader',
'interpolate-loader'
])
},
// Workaround for https://github.com/webpack/webpack/issues/5828
{
test: require.resolve('webextension-polyfill'),
use: 'imports-loader?browser=>undefined'
}
]
},
plugins: [
new CleanWebpackPlugin(DIST_DIR),
new ExtractTextPlugin(MANIFEST_FILE),
new webpack.ProvidePlugin({
browser: 'webextension-polyfill'
}),
IS_PRODUCTION ? new MinifyPlugin() : /* no-op */ new Function()
],
devtool: IS_PRODUCTION ? '' : 'inline-source-map'
};