-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebpack.config.js
125 lines (118 loc) · 2.88 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
const path = require('path');
let babelOptions;
let filename = '[name].js';
const minify = process.env.BUILD_MODE.endsWith('min');
if (!process.env.BUILD_MODE.startsWith('umd')) {
// To see es* prefix in webpack stat output, concatenate folder with filename
filename = `${process.env.BUILD_MODE.match(/^([^-]+)/)[1]}/${filename}`;
}
if (process.env.BUILD_MODE.startsWith('umd')) {
babelOptions = {
presets: [
'react',
'env',
],
plugins: [
'transform-class-properties',
'transform-object-rest-spread',
['transform-react-remove-prop-types', {mode: 'remove'}],
],
};
} else if (process.env.BUILD_MODE.startsWith('es2015')) {
babelOptions = {
plugins: [
['transform-react-jsx', {useBuiltIns: true}],
'syntax-jsx',
'transform-async-to-generator',
'transform-class-properties',
['transform-object-rest-spread', {useBuiltIns: true}],
['transform-react-remove-prop-types', {mode: 'remove'}],
],
};
} else if (process.env.BUILD_MODE.startsWith('es2017')) {
babelOptions = {
plugins: [
['transform-react-jsx', {useBuiltIns: true}],
'syntax-jsx',
'transform-class-properties',
['transform-object-rest-spread', {useBuiltIns: true}],
['transform-react-remove-prop-types', {mode: 'remove'}],
],
};
}
module.exports = {
entry: {
[`react-forwardref-utils${minify ? '.min' : ''}`]: './src/index.js',
},
output: {
filename,
sourceMapFilename: `${filename}.map`,
path: path.resolve(__dirname, 'dist'),
pathinfo: false,
libraryTarget: 'umd',
library: 'SizeWatcher',
},
devtool: 'source-map',
mode: 'production',
optimization: {
removeAvailableModules: true,
removeEmptyChunks: true,
mergeDuplicateChunks: true,
flagIncludedChunks: true,
occurrenceOrder: true,
providedExports: true,
usedExports: true,
sideEffects: true,
concatenateModules: true,
splitChunks: false,
runtimeChunk: false,
noEmitOnErrors: true,
namedModules: true,
namedChunks: true,
nodeEnv: 'production',
minimize: minify,
},
resolve: {
modules: [
path.resolve('src'),
'node_modules',
],
},
externals: {
'react': 'umd react',
'hoist-non-react-statics': {
amd: 'hoist-non-react-statics',
root: 'hoistNonReactStatics',
commonjs: 'hoist-non-react-statics',
commonjs2: 'hoist-non-react-statics',
},
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: babelOptions,
},
},
],
},
node: {
process: false,
setImmediate: false,
},
stats: {
assets: true,
colors: true,
errors: true,
errorDetails: true,
hash: false,
timings: true,
version: true,
warnings: true,
entrypoints: false,
modules: false,
},
};