const path = require('path'); const TerserPlugin = require('terser-webpack-plugin') const htmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { mode: 'production', name: 'yhdesigner-userDefineModule', entry: { "designer": './src/index.ts', "preview": './src/preview.ts' }, output: { filename: '[name].js', path: path.resolve(__dirname, './dist') }, module: { unknownContextCritical: false, rules: [ { test: /\.tsx?$/, use: ['ts-loader'], exclude: /node_modules/ }, { test: /\.css$/, use: ['style-loader', 'css-loader'] }, { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }, { test: /\.(gif|png|jpeg|eot|woff|ttf|svg|pdf)$/, use: ['file-loader'] } ] }, resolve: { extensions: ['.tsx', '.ts', ".js"], alias: { 'vue$': 'vue/dist/vue.esm.js' } }, optimization: { minimize: true, minimizer: [ new TerserPlugin({ terserOptions: { ecma: 5, parse: {}, warnings: false, keep_classnames: true, keep_fnames: true, compress: { drop_console: true, drop_debugger: true, pure_funcs: ['console.log'] // 移除console }, }, extractComments: false }), ] }, performance: { hints: 'warning', //入口起点的最大体积 整数类型(以字节为单位) maxEntrypointSize: 50000000, //生成文件的最大体积 整数类型(以字节为单位 300k) maxAssetSize: 30000000, //只给出 js 文件的性能提示 assetFilter: function (assetFilename) { return assetFilename.endsWith('.css') || assetFilename.endsWith('.js'); } }, plugins: [ new htmlWebpackPlugin({ template: './src/index.html', filename: 'index.html', inject: 'body', chunks: ['designer'] }), new htmlWebpackPlugin({ template: './src/preview.html', filename: 'preview.html', inject: 'body', chunks: ['preview'] }), ], externals: { jquery: "$", lodash: "_", echarts: "echarts", } }