UNPKG

@cloudbase/utilities

Version:
101 lines (98 loc) 2.29 kB
const path = require('path') const webpack = require('webpack') const TerserPlugin = require('terser-webpack-plugin') // const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin module.exports = function (options) { const { context, entry, output, mode, watch, externals, definePlugin = {}, optimization = {} } = options const isDevelopment = mode !== 'production' let plugins = [ new webpack.DefinePlugin(definePlugin), // new BundleAnalyzerPlugin() ].filter((item) => !!item) const BABEL_LOADER = { loader: 'babel-loader', options: { presets: [ [ '@babel/preset-env', { modules: false, targets: { esmodules: true, }, }, ], ], }, } return { context, entry, mode, watch, watchOptions: { ignored: [output.path], }, output, externals, cache: { type: 'memory', }, devtool: false, resolve: { extensions: ['.ts', '.js', '.json'], }, module: { rules: [ { test: /\.ts$/, exclude: [/node_modules/], use: [ BABEL_LOADER, { loader: require.resolve('ts-loader'), options: { configFile: path.resolve(context, './tsconfig.esm.json'), }, }, ], }, { test: /\.js$/, exclude: [/node_modules/], use: [BABEL_LOADER], }, { test: /package\.json$/, loader: 'package-json-cleanup-loader', options: { only: ['version'], }, }, ], noParse: [/sjcl\.js$/], }, plugins, optimization: { emitOnErrors: false, removeEmptyChunks: true, usedExports: true, ...optimization, ...(isDevelopment ? { minimize: false, removeAvailableModules: false, concatenateModules: true, } : { minimizer: [ new TerserPlugin({ test: /\.js(\?.*)?$/i, cache: false, parallel: true, }), ], }), }, } }