-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathwebpack.config.js
112 lines (101 loc) · 2.96 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
const webpack = require('webpack');
const path = require('path');
const version = require('./package.json').version;
const versionDir = `dist/v${version}`;
const majorVersion = version.split('.')[0];
const majorVersionDir = `dist/v${majorVersion}`;
/* used for copying to non `.bundle` filenames (see `scripts/build.ts`) */
const fileNames = {
bundle: 'genesys-cloud-webrtc-sdk.bundle.js',
bundleMap: 'genesys-cloud-webrtc-sdk.bundle.js.map',
bundleMin: 'genesys-cloud-webrtc-sdk.bundle.min.js',
bundleMinMap: 'genesys-cloud-webrtc-sdk.bundle.min.js.map'
};
module.exports = (env) => {
const minimize = env && env.production;
const cdn = env && env.cdn;
const mode = minimize ? 'production' : 'development';
const filename = `genesys-cloud-webrtc-sdk.bundle${minimize ? '.min.js' : '.js'}`;
if (!cdn) {
console.error(new Error('Webpack build can only be built for the CDN. \n Be sure to pass in `--env.cdn` param to build script\n'));
process.exit(1);
}
/*
this is so babel doesn't try to polyfill/transpile core-js (which is the polyfill)
and the build tools.
But we want it polyfill/transpile all other node_modules when building for the web
*/
const babelExcludes = [
/@babel\//,
/\bcore-js\b/,
/\bwebpack\/buildin\b/
];
const babelOptions = {
sourceType: 'unambiguous',
presets: [
['@babel/preset-env', {
debug: false,
targets: [
'last 2 versions',
'> 5%',
'IE 11',
'not dead'
]
}],
'@babel/preset-typescript'
],
plugins: [
['@babel/plugin-transform-runtime', {
corejs: 3
}],
'@babel/plugin-proposal-class-properties',
'@babel/plugin-transform-property-mutators'
]
};
console.log('building: ', env);
const allowedFilenames = Object.values(fileNames);
if (!allowedFilenames.includes(filename)) {
console.error('Generated file name is not in the fileNames map', { allowedFilenames, filename });
console.error(new Error('cannot build to desired file name'));
process.exit(1);
}
return {
target: 'web',
entry: './src/index.ts',
mode,
optimization: {
minimize
},
devtool: 'source-map',
output: {
path: path.resolve(__dirname, versionDir),
filename,
library: 'GenesysCloudWebrtcSdk',
libraryTarget: 'umd'
},
plugins: [
new webpack.ProvidePlugin({
process: 'process-fast'
})
],
resolve: {
extensions: ['.ts', '.js', '.cjs', '.mjs', '.json']
},
module: {
rules: [
{
parser: { amd: false },
test: /\.(cjs|mjs|js|ts)$/,
loader: 'babel-loader',
exclude: babelExcludes,
options: babelOptions
}
]
}
};
};
module.exports.fileNames = fileNames;
module.exports.version = version;
module.exports.versionDir = versionDir;
module.exports.majorVersion = majorVersion;
module.exports.majorVersionDir = majorVersionDir;