172 lines
3.5 KiB
JavaScript
172 lines
3.5 KiB
JavaScript
const { readFileSync } = require('fs');
|
|
const { resolve } = require('path');
|
|
|
|
const { BannerPlugin, EnvironmentPlugin } = require('webpack');
|
|
const WorkerPlugin = require('worker-plugin');
|
|
|
|
const { merge } = require('webpack-merge');
|
|
const {
|
|
argv: { mode },
|
|
} = require('yargs');
|
|
|
|
const { name: filename, version } = require('./package.json');
|
|
|
|
const banner = readFileSync(resolve('./_includes/header.txt'), 'utf-8');
|
|
|
|
const ASSET_PATH = '/assets/js/';
|
|
|
|
const envConfig = (() => {
|
|
switch (mode) {
|
|
case 'production':
|
|
return {
|
|
devtool: false,
|
|
plugins: [
|
|
new WorkerPlugin({ globalObject: 'self' }),
|
|
new BannerPlugin({ banner, raw: true }),
|
|
new EnvironmentPlugin({
|
|
DEBUG: false,
|
|
ASSET_PATH,
|
|
GET_CLAPS_API: 'https://worker.getclaps.app',
|
|
}),
|
|
],
|
|
};
|
|
|
|
default:
|
|
return {
|
|
devtool: 'source-map',
|
|
plugins: [
|
|
new WorkerPlugin({ globalObject: 'self' }),
|
|
new EnvironmentPlugin({
|
|
DEBUG: true,
|
|
ASSET_PATH,
|
|
GET_CLAPS_API: 'https://worker.getclaps.dev',
|
|
}),
|
|
],
|
|
};
|
|
}
|
|
})();
|
|
|
|
const sharedPreset = {
|
|
modules: false,
|
|
useBuiltIns: 'entry',
|
|
corejs: 2,
|
|
};
|
|
|
|
const babelPresetLegacy = {
|
|
babelrc: false,
|
|
presets: [
|
|
[
|
|
'@babel/preset-env',
|
|
{
|
|
...sharedPreset,
|
|
targets: {
|
|
ie: '11',
|
|
},
|
|
},
|
|
],
|
|
],
|
|
};
|
|
|
|
const babelPresetModern = {
|
|
babelrc: false,
|
|
presets: [
|
|
[
|
|
'@babel/preset-env',
|
|
{
|
|
...sharedPreset,
|
|
targets: {
|
|
esmodules: true,
|
|
},
|
|
},
|
|
],
|
|
],
|
|
};
|
|
|
|
const sharedConfig = {
|
|
entry: resolve('./_js/src/entry.js'),
|
|
|
|
output: {
|
|
path: resolve('./assets/js'),
|
|
publicPath: ASSET_PATH,
|
|
},
|
|
resolve: {
|
|
modules: [
|
|
resolve('./_js'),
|
|
resolve('./node_modules'),
|
|
...(process.env.NODE_PATH ? [resolve(process.env.NODE_PATH)] : []),
|
|
],
|
|
extensions: ['.json', '.js'],
|
|
symlinks: true,
|
|
},
|
|
optimization: {
|
|
splitChunks: {
|
|
// chunks: 'all',
|
|
// minSize: 30000,
|
|
// maxSize: 0,
|
|
// minChunks: 1,
|
|
// maxAsyncRequests: 5,
|
|
// maxInitialRequests: 3,
|
|
// automaticNameDelimiter: '~',
|
|
// automaticNameMaxLength: 30,
|
|
// name: true,
|
|
// cacheGroups: {
|
|
// vendors: {
|
|
// test: /[\\/]node_modules[\\/]/,
|
|
// priority: -10
|
|
// },
|
|
// default: {
|
|
// minChunks: 2,
|
|
// priority: -20,
|
|
// reuseExistingChunk: true
|
|
// }
|
|
// }
|
|
},
|
|
},
|
|
performance: {
|
|
hints: 'warning',
|
|
maxEntrypointSize: 512000,
|
|
maxAssetSize: 512000,
|
|
},
|
|
};
|
|
|
|
module.exports = [
|
|
merge(envConfig, sharedConfig, {
|
|
output: {
|
|
filename: `${filename}-${version}.js`,
|
|
chunkFilename: `[name]-${filename}-${version}.js`,
|
|
},
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /(\.jsx|\.js)$/,
|
|
loader: 'babel-loader',
|
|
options: babelPresetModern,
|
|
},
|
|
{
|
|
test: /modernizr-custom/,
|
|
use: 'null-loader',
|
|
},
|
|
{
|
|
test: /@webcomponents\/(template|url|webcomponents-platform)/,
|
|
use: 'null-loader',
|
|
},
|
|
],
|
|
},
|
|
}),
|
|
merge(envConfig, sharedConfig, {
|
|
output: {
|
|
filename: `LEGACY-${filename}-${version}.js`,
|
|
chunkFilename: `LEGACY-[name]-${filename}-${version}.js`,
|
|
},
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /(\.jsx|\.js)$/,
|
|
loader: 'babel-loader',
|
|
options: babelPresetLegacy,
|
|
},
|
|
],
|
|
},
|
|
}),
|
|
];
|