-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathwebpack.config.js
106 lines (101 loc) · 2.38 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
const path = require('path');
const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
const EsmWebpackPlugin = require('@purtuga/esm-webpack-plugin');
const fs = require('fs');
const pkg = require('./package.json');
const copyright = fs.readFileSync('LICENSE.md', { encoding: 'utf-8' }).split(/[\r\n]/)[0];
const date = new Date().toUTCString();
const longBanner = `/*!
* ${pkg.description} ${pkg.version}
* ${pkg.homepage}
*
* ${copyright}
*
* Includes:
* uuid - https://github.com/uuidjs/uuid
* Copyright (c) 2010-2020 Robert Kieffer and other contributors
*
* Released under the MIT license
*
* Date: ${date}
*/
`;
const tsOptions = {
es5: {
target: 'es5',
module: 'commonjs',
importHelpers: true,
},
es2015: {
target: 'es6',
module: 'es2015',
},
};
function bundleLib(target) {
return {
name: target,
mode: 'production',
entry: {
[`baqend.${target}`]: './lib/index.ts',
[`baqend.${target}.min`]: './lib/index.ts',
},
output: {
path: path.resolve(__dirname, 'dist/'),
filename: '[name].js',
libraryTarget: target === 'es2015' ? 'var' : 'umd',
library: 'Baqend',
umdNamedDefine: target !== 'es2015',
},
externals: {
validator: 'validator',
},
resolve: {
extensions: ['.ts'],
aliasFields: ['browser'],
},
devtool: 'source-map',
node: false,
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
include: /\.min\.js$/,
extractComments: {
banner: (licenseFile) => `${pkg.name} ${pkg.version} | ${copyright} | License information ${licenseFile}`,
},
}),
],
concatenateModules: target === 'es2015',
},
module: {
rules: [
{
test: /\.ts$/,
exclude: [/node_modules/],
loader: 'ts-loader',
options: {
onlyCompileBundledFiles: true,
configFile: 'tsconfig.lib.json',
compilerOptions: tsOptions[target],
},
},
],
},
stats: {
optimizationBailout: true,
},
plugins: [
...(target === 'es2015' ? [new EsmWebpackPlugin()] : []),
new webpack.BannerPlugin({
banner: longBanner,
raw: true,
entryOnly: true,
}),
],
};
}
module.exports = [
bundleLib('es5'),
bundleLib('es2015'),
];