mirror of
https://github.com/zhigang1992/connect.git
synced 2026-01-13 09:00:27 +08:00
111 lines
3.6 KiB
JavaScript
111 lines
3.6 KiB
JavaScript
const path = require('path');
|
|
const TerserPlugin = require('terser-webpack-plugin');
|
|
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
|
|
const webpack = require('webpack');
|
|
|
|
const analyzeBundle = process.env.ANALYZE === 'true';
|
|
|
|
module.exports = {
|
|
entry: './src/index.ts',
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /\.(ts|tsx)?$/,
|
|
exclude: /node_modules/,
|
|
use: {
|
|
loader: 'babel-loader',
|
|
options: {
|
|
cacheDirectory: true,
|
|
babelrc: false,
|
|
presets: [
|
|
[
|
|
'@babel/preset-env',
|
|
{ targets: { browsers: 'last 2 versions' } }, // or whatever your project requires
|
|
],
|
|
'@babel/preset-typescript',
|
|
'@babel/preset-react',
|
|
],
|
|
plugins: [
|
|
// plugin-proposal-decorators is only needed if you're using experimental decorators in TypeScript
|
|
// ["@babel/plugin-proposal-decorators", { legacy: true }],
|
|
['@babel/plugin-proposal-class-properties', { loose: true }],
|
|
'@babel/plugin-transform-runtime',
|
|
'@babel/plugin-proposal-nullish-coalescing-operator',
|
|
'@babel/plugin-proposal-optional-chaining',
|
|
].filter(Boolean),
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
optimization: {
|
|
minimize: true,
|
|
minimizer: [
|
|
// This is only used in production mode
|
|
new TerserPlugin({
|
|
terserOptions: {
|
|
parse: {
|
|
// We want terser to parse ecma 8 code. However, we don't want it
|
|
// to apply any minification steps that turns valid ecma 5 code
|
|
// into invalid ecma 5 code. This is why the 'compress' and 'output'
|
|
// sections only apply transformations that are ecma 5 safe
|
|
// https://github.com/facebook/create-react-app/pull/4234
|
|
ecma: 8,
|
|
},
|
|
compress: {
|
|
ecma: 5,
|
|
warnings: false,
|
|
// Disabled because of an issue with Uglify breaking seemingly valid code:
|
|
// https://github.com/facebook/create-react-app/issues/2376
|
|
// Pending further investigation:
|
|
// https://github.com/mishoo/UglifyJS2/issues/2011
|
|
comparisons: false,
|
|
// Disabled because of an issue with Terser breaking valid code:
|
|
// https://github.com/facebook/create-react-app/issues/5250
|
|
// Pending further investigation:
|
|
// https://github.com/terser-js/terser/issues/120
|
|
inline: 2,
|
|
},
|
|
mangle: {
|
|
safari10: true,
|
|
},
|
|
// Added for profiling in devtools
|
|
keep_classnames: false,
|
|
keep_fnames: false,
|
|
output: {
|
|
ecma: 5,
|
|
comments: false,
|
|
// Turned on because emoji and regex is not minified properly using default
|
|
// https://github.com/facebook/create-react-app/issues/2488
|
|
ascii_only: true,
|
|
},
|
|
},
|
|
sourceMap: false,
|
|
}),
|
|
],
|
|
},
|
|
resolve: {
|
|
extensions: ['.tsx', '.ts', '.js'],
|
|
alias: {
|
|
react: 'preact/compat',
|
|
'react-dom/test-utils': 'preact/test-utils',
|
|
'react-dom': 'preact/compat',
|
|
},
|
|
},
|
|
devtool: false,
|
|
plugins: [
|
|
// BIP39 includes ~240KB of non-english json that we don't currently use.
|
|
new webpack.IgnorePlugin(/\.\/wordlists\/(?!english\.json)/),
|
|
],
|
|
output: {
|
|
filename: 'bundle.js',
|
|
path: path.resolve(__dirname, 'dist'),
|
|
library: 'blockstackConnect',
|
|
libraryTarget: 'var',
|
|
},
|
|
};
|
|
|
|
if (analyzeBundle) {
|
|
module.exports.plugins.push(new BundleAnalyzerPlugin());
|
|
}
|