const path = require("path"); const webpack = require('webpack'); const TerserPlugin = require("terser-webpack-plugin"); const HappyPack = require('happypack'); const os = require('os'); const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length }); const common = require("./common"); const pathVars = require("./pathVars"); const pageVars = require("./pageVars"); //---------------------------------- output -----------------------------------// const entryConfig = {}; let charts = pageVars.getCharts(); charts.forEach((chartItem) => { entryConfig[chartItem["chunkName"]] = chartItem["entryJs"]; }); console.log("entryConfig", entryConfig); //---------------------------------- output -----------------------------------// let outputConfig = { path: pathVars.chartsDistPath, publicPath: "./", // 表示资源的发布地址,当配置过该属性后,打包文件中所有通过相对路径引用的资源都会被配置的路径所替换(如:css中背景图的路径) filename: "[name].js", library: "[name]", libraryExport: 'default', umdNamedDefine: true, // es umd libraryTarget: "umd", assetModuleFilename: 'chartImages/[name]_[hash][ext][query]' }; //---------------------------------- plugin -----------------------------------// let pluginConfig = [ new HappyPack({ id: 'babel', loaders: ["babel-loader"], threadPool: happyThreadPool }) ]; module.exports = { mode: 'production', entry: entryConfig, output: outputConfig, resolve: common.resolve, module: { rules: [{ test: /\.(css|less)$/, include: [pathVars.srcPath], exclude: [pathVars.nodeModulesPath], use: [{ options: { /* 解决css背景图路径问题 由于图片目录已经定好了,因此这里可以用固定的相对路径*/ publicPath: '../' }, }, //"css-loader?modules&localIdentName=[name]__[local]-[hash:base64:5]", "css-loader", "less-loader" ], }, { test: /\.js$/, exclude: pathVars.nodeModulesPath, include: pathVars.srcPath, use: ['babel-loader'] //use: ["happypack/loader?id=babel"] }, { test: /\.(png|jpg|gif|woff|svg|eot|ttf|woff2)$/, type: 'asset/resource', parser: { dataUrlCondition: { maxSize: 10 * 1024 } } }, { test: /\.(glsl|vs|fs|vert|frag)$/, exclude: [pathVars.nodeModulesPath, pathVars.dllPath], use: ["raw-loader", "glslify-loader"] } ] }, plugins: pluginConfig, optimization: { minimize: true, minimizer: [ new TerserPlugin() ] } };