/* eslint-disable @typescript-eslint/no-var-requires */ const path = require('path') const UglifyJsPlugin = require('uglifyjs-webpack-plugin') const { VueLoaderPlugin } = require('vue-loader') const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin const libMode = process.env.LIBMODE const isFullMode = libMode === 'full' const externals = [ { vue: { root: 'Vue', commonjs: 'vue', commonjs2: 'vue' } } ] const entry = path.resolve(__dirname, '../packages/element-plus/index.ts') if (!isFullMode) { externals.push({ '@popperjs/core': '@popperjs/core', 'async-validator': 'async-validator', 'mitt': 'mitt', 'normalize-wheel': 'normalize-wheel', 'resize-observer-polyfill': 'resize-observer-polyfill', }, /^dayjs.*/, /^lodash.*/) } const config = { mode: 'production', entry, output: { path: path.resolve(__dirname, '../lib'), publicPath: '/', filename: isFullMode ? 'index.full.js' : 'index.js', libraryTarget: 'umd', library: 'ElementPlus', umdNamedDefine: true, globalObject: 'typeof self !== \'undefined\' ? self : this', }, module: { rules: [ { test: /\.vue$/, use: 'vue-loader' }, { test: /\.(ts|js)x?$/, exclude: /node_modules/, loader: 'babel-loader' } ] }, resolve: { extensions: ['.ts', '.tsx', '.js', '.json'] }, cache: true, externals, plugins } const plugins = [ new VueLoaderPlugin(), new UglifyJsPlugin({ uglifyOptions: { compress: { warnings: false, drop_console: true } }, exclude: /manifest.+js/, sourceMap: config.build.productionSourceMap, parallel: true }), new BundleAnalyzerPlugin({ analyzerMode: 'server', analyzerHost: '127.0.0.1', analyzerPort: 8889, reportFilename: 'report.html', defaultSizes: 'parsed', openAnalyzer: true, generateStatsFile: false, statsFilename: 'stats.json', statsOptions: null, logLevel: 'info' }) ] module.exports = config