forked from firefox-devtools/profiler
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebpack.config.js
144 lines (139 loc) · 4.35 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
137
138
139
140
141
142
143
144
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const OfflinePlugin = require('offline-plugin');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const includes = [path.join(__dirname, 'src'), path.join(__dirname, 'res')];
const es6modules = ['pretty-bytes'];
const es6modulePaths = es6modules.map(module => {
return path.join(__dirname, 'node_modules', module);
});
const config = {
resolve: {
alias: {
'redux-devtools/lib': path.join(__dirname, '..', '..', 'src'),
'redux-devtools': path.join(__dirname, '..', '..', 'src'),
react: path.join(__dirname, 'node_modules', 'react'),
},
extensions: ['.js'],
},
devtool: 'source-map',
module: {
rules: [
{
test: /\.js$/,
loaders: ['babel-loader'],
include: includes.concat(es6modulePaths),
},
{
test: /\.json$/,
loaders: ['json-loader'],
include: includes,
},
{
test: /\.css?$/,
loaders: ['style-loader', 'css-loader?minimize'],
include: includes.concat(
path.join(__dirname, 'node_modules', 'photon-colors')
),
},
{
test: /\.jpg$/,
loader: 'file-loader',
},
{
test: /\.png$/,
loader: 'file-loader',
},
{
test: /\.svg$/,
loader: 'file-loader',
},
],
},
node: {
process: false,
},
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': `"${process.env.NODE_ENV}"`,
}),
new HtmlWebpackPlugin({
title: 'perf.html',
template: 'res/index.html',
favicon: 'res/img/favicon.png',
}),
new CopyWebpackPlugin([
{ from: 'res/_headers' },
{ from: 'res/_redirects' },
{ from: 'docs-user', to: 'docs' },
]),
],
entry: ['./src/index'],
output: {
path: path.join(__dirname, 'dist'),
filename: '[hash].bundle.js',
chunkFilename: '[id].[hash].bundle.js',
publicPath: '/',
},
};
if (process.env.NODE_ENV === 'development') {
config.devtool = 'source-map';
config.entry = ['webpack-dev-server/client?http://localhost:4242'].concat(
config.entry
);
}
if (process.env.NODE_ENV === 'production') {
config.plugins.push(
new webpack.optimize.ModuleConcatenationPlugin(),
new UglifyJsPlugin({
sourceMap: true,
parallel: true,
cache: true,
uglifyOptions: process.env.UGLIFY_OPTIONS
? JSON.parse(process.env.UGLIFY_OPTIONS)
: undefined,
}),
new OfflinePlugin({
relativePaths: false,
AppCache: false,
ServiceWorker: {
scope: '/',
events: true,
},
externals: ['/zee-worker.js', '/analytics.js'],
/* Exclude the files used but not served by netlify. When trying to fetch
* them we get a 404, and so the SW registration fails. */
excludes: ['_headers', '_redirects'],
cacheMaps: [
{
requestTypes: ['navigate'],
match: function(url, _request) {
// This function is called for "navigate" requests to URLs within
// our origin, whose URL does not match any files in the service
// worker's list of assets. We can return a different URL which
// will be looked up in the cache for this request.
// There are two cases in which this happens:
if (url.pathname === '/sw.js') {
// 1. The service worker script itself is not in the list of
// assets. Return null, which means "no override". The service
// worker will fall back to getting this file from the network,
// which is what we want to happen.
// Doing this is not necessary for the service worker (and for
// service worker updates) to work, but it makes debugging easier
// because you can load the /sw.js URL from the address bar of
// your browser and see the actual service worker script
return null;
}
// 2. It's a URL like /from-addon/, or /public/.../?... .
// For those URLs we want to respond with index.html, which is
// cached as the "/" URL.
return url.origin + '/';
},
},
],
})
);
}
module.exports = config;