forked from microsoft/accessibility-insights-web
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebpack.config.js
109 lines (103 loc) · 3.55 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
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
const path = require('path');
const webpack = require('webpack');
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin');
const commonPlugins = [
new webpack.optimize.LimitChunkCountPlugin({
maxChunks: 1, // Must be greater than or equal to one
minChunkSize: 1000000,
}),
// Be warned: this plugin supports tslint, but enabling it here causes webpack to occasionally
// process.exit(0) in the middle of execution on mac build machines, resulting in difficult to
// debug build failures. We aren't quite sure why this is yet, but until it's root caused, keep
// tslint separate from webpack.
new ForkTsCheckerWebpackPlugin(),
new CaseSensitivePathsPlugin(),
];
const commonEntryFiles = {
injected: [path.resolve(__dirname, 'src/injected/stylesheet-init.ts'), path.resolve(__dirname, 'src/injected/client-init.ts')],
popup: path.resolve(__dirname, 'src/popup/popup-init.ts'),
insights: [path.resolve(__dirname, 'src/views/insights/initializer.ts')],
detailsView: [path.resolve(__dirname, 'src/DetailsView/details-view-initializer.ts')],
devtools: [path.resolve(__dirname, 'src/Devtools/dev-tool-init.ts')],
background: [path.resolve(__dirname, 'src/background/background-init.ts')],
};
const commonConfig = {
entry: commonEntryFiles,
module: {
rules: [
{
test: /\.tsx?$/,
use: [
{
loader: 'ts-loader',
options: {
transpileOnly: true,
experimentalWatchApi: true,
},
},
],
exclude: ['/node_modules/'],
},
],
},
resolve: {
modules: [path.resolve(__dirname, 'node_modules')],
extensions: ['.tsx', '.ts', '.js'],
},
plugins: commonPlugins,
node: {
setImmediate: false,
},
performance: {
// We allow higher-than-normal sizes because our users only have to do local fetches of our bundles
maxEntrypointSize: 10 * 1024 * 1024,
maxAssetSize: 10 * 1024 * 1024,
},
};
const devConfig = {
...commonConfig,
name: 'dev',
mode: 'development',
devtool: 'eval-source-map',
output: {
path: path.join(__dirname, 'extension/devBundle'),
filename: '[name].bundle.js',
},
optimization: {
splitChunks: false,
},
};
const prodConfig = {
...commonConfig,
name: 'prod',
mode: 'production',
devtool: false,
output: {
path: path.join(__dirname, 'extension/prodBundle'),
filename: '[name].bundle.js',
pathinfo: false,
},
optimization: {
splitChunks: false,
minimizer: [
new UglifyJsPlugin({
sourceMap: false,
uglifyOptions: {
compress: false,
mangle: false,
output: {
ascii_only: true,
comments: /^\**!|@preserve|@license|@cc_on/i,
beautify: false,
},
},
}),
],
},
};
// Use "webpack --config-name dev" or "webpack --config-name prod" to use just one or the other
module.exports = [devConfig, prodConfig];