-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathwebpack.config.ts
125 lines (111 loc) · 2.57 KB
/
webpack.config.ts
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
'use strict'
import { join } from 'path'
import webpack = require('webpack')
import WebpackNotifierPlugin = require('webpack-notifier')
import EventHooksPlugin = require('event-hooks-webpack-plugin')
import TerserPlugin = require('terser-webpack-plugin')
const FileManagerPlugin = require('filemanager-webpack-plugin')
const isDev = process.argv.includes('--watch')
const mode = isDev ? 'development' : 'production'
const configuration: webpack.Configuration = {
mode,
// Entry and Context
//~~~~~~~~~~~~~~~~~~~~~~~
context: __dirname,
entry: {
'content_scripts': './src/content_scripts',
'background': './src/background',
},
// Output
//~~~~~~~~~~
output: {
filename: '[name].js',
path: join(__dirname, 'dist/manifest-v2'),
},
// Module
//~~~~~~~~~~~
module: {
noParse: [ /sinon/ ],
rules: [
{
test: /sinon.*\.js$/,
use: 'imports-loader?define=>false,require=>false',
},
{
test: /\.tsx?$/,
use: 'ts-loader',
},
],
},
// Resolve
//~~~~~~~~~~~
resolve: {
extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'],
alias: {
'sinon': 'sinon/pkg/sinon',
},
},
// Optimization and Plugins
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~
optimization: {
minimizer: [
new TerserPlugin({
extractComments: false,
}),
new webpack.optimize.AggressiveMergingPlugin(),
]
},
plugins: [
new webpack.DefinePlugin({
_DEBUG: JSON.stringify(isDev),
}),
new webpack.NormalModuleReplacementPlugin(
/sinon/,
`${__dirname}/node_modules/sinon/pkg/sinon.js`
),
new WebpackNotifierPlugin(),
new EventHooksPlugin({
run: () => console.log('Mode:', mode),
watchRun: () => console.log('Mode:', mode),
}),
new FileManagerPlugin({
events: {
onEnd: {
copy: [
{
source: 'dist/manifest-v2/*.js',
destination: 'dist/manifest-v3/',
},
{
source: 'dist/manifest-v2/*.js.map',
destination: 'dist/manifest-v3/',
},
],
},
},
}),
],
// Watch and WatchOptions
//~~~~~~~~~~~~~~~~~~~~~~~~~
watchOptions: {
poll: true,
},
// Performance
//~~~~~~~~~~~~~~~
performance: {
hints: false,
},
// Stats
//~~~~~~~~
stats: {
entrypoints: true,
children: false,
chunks: false,
chunkModules: false,
chunkOrigins: false,
colors: true,
modules: false,
},
devtool: isDev ? 'cheap-module-source-map' : false,
}
module.exports = configuration