90 lines
2.5 KiB
JavaScript
90 lines
2.5 KiB
JavaScript
const path = require('path');
|
|
const webpack = require('webpack');
|
|
|
|
const TerserPlugin = require('terser-webpack-plugin');
|
|
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
|
|
|
|
const nodeExternals = require('webpack-node-externals');
|
|
|
|
const buildInfo = {
|
|
version: require('./package.json').version,
|
|
buildDate: new Date().toISOString(),
|
|
commitHash: require('child_process').execSync('git rev-parse HEAD').toString().trim(),
|
|
};
|
|
|
|
const definedVariables = {
|
|
BUILD_INFO: JSON.stringify(buildInfo),
|
|
};
|
|
|
|
console.log('definedVariables', definedVariables);
|
|
|
|
// https://webpack.js.org/guides/typescript/
|
|
module.exports = {
|
|
target: 'node',
|
|
node: {
|
|
__dirname: false,
|
|
},
|
|
entry: './src/index.ts',
|
|
output: {
|
|
path: path.resolve(__dirname, 'build'),
|
|
filename: 'index.js',
|
|
devtoolModuleFilenameTemplate: '../[resource-path]',
|
|
},
|
|
mode: 'production',
|
|
externals: [nodeExternals()],
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /\.tsx?$/,
|
|
use: 'ts-loader',
|
|
exclude: /node_modules/,
|
|
},
|
|
],
|
|
},
|
|
resolve: {
|
|
extensions: ['.tsx', '.ts', '.js', '.jsx'],
|
|
},
|
|
// https://webpack.js.org/guides/typescript/#source-maps
|
|
devtool: 'source-map',
|
|
optimization: {
|
|
minimize: true,
|
|
// https://webpack.js.org/plugins/uglifyjs-webpack-plugin/
|
|
minimizer: [
|
|
// https://stackoverflow.com/questions/47439067/uglifyjs-throws-unexpected-token-keyword-const-with-node-modules
|
|
new TerserPlugin({
|
|
sourceMap: true,
|
|
// https://webpack.js.org/plugins/terser-webpack-plugin/#extractcomments
|
|
extractComments: false,
|
|
// https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions
|
|
terserOptions: {
|
|
ecma: 6,
|
|
// warnings: false,
|
|
mangle: {
|
|
toplevel: true,
|
|
// https://github.com/terser/terser#mangle-properties-options
|
|
// properties: true
|
|
},
|
|
},
|
|
}),
|
|
],
|
|
},
|
|
stats: {
|
|
// https://github.com/yargs/yargs/blob/master/docs/webpack.md#webpack-configuration
|
|
warningsFilter: [
|
|
/node_modules\/yargs/,
|
|
/.*plugin-loader.ts*/,
|
|
],
|
|
},
|
|
plugins: [
|
|
new webpack.DefinePlugin(definedVariables),
|
|
...(process.env.ANALYZE_BUNDLE ? [new BundleAnalyzerPlugin({
|
|
analyzerMode: 'static',
|
|
openAnalyzer: false,
|
|
})] : []),
|
|
...(!process.env.ANALYZE_BUNDLE ? [new webpack.BannerPlugin({
|
|
banner: '#!/usr/bin/env node',
|
|
raw: true,
|
|
})] : []),
|
|
],
|
|
};
|