'use strict' const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer"); const webpack = require("webpack"); const CompressionPlugin = require('compression-webpack-plugin') const path = require('path') function resolve(dir) { return path.join(__dirname, dir) } module.exports = { lintOnSave: process.env.NODE_ENV !== "production", productionSourceMap: false, // 生产环境关闭 source map publicPath: process.env.NODE_ENV === 'production' ? './' : '/', css: { loaderOptions: { less: { // lessOptions: { // If you are using less-loader@5 please spread the lessOptions to options directly modifyVars: { "primary-color": "#1890ff", "link-color": "#1890ff", "border-radius-base": "2px", }, javascriptEnabled: true, // }, }, }, }, configureWebpack: (config) => { if (process.env.NODE_ENV === "production") { // 打包分析工具 config.plugins.push(new BundleAnalyzerPlugin()); // 取消 console.log config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true }else{ // config.devtool = "source-map"; } }, chainWebpack: (config) => { config .plugin("ignore") // 忽略/moment/locale下的所有文件 .use(new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)); // 按需加载icon config.resolve.alias .set('@ant-design/icons/lib/dist$',resolve("src/index/utils/lazy/icons.js")) // 拆分chunk config.optimization.splitChunks({ chunks: 'all', cacheGroups: { common: { name: 'chunk-common', // 打包后的文件名 chunks: 'initial', // 非动态模块打包进该vendor,动态模块优化打包 minChunks: 2, maxInitialRequests: 5, minSize: 0, priority: 1, reuseExistingChunk: true }, libs: { name: 'chunk-vendors', test: /[\\/]node_modules[\\/]/, chunks: 'initial', priority: 2, reuseExistingChunk: true, }, antDesignVue: { name: 'chunk-antDesignVue', // 单独将 antdesignvue 拆包 test: /[\\/]node_modules[\\/]ant-design-vue[\\/]/, priority: 3, reuseExistingChunk: true, }, // echarts: { // name: 'chunk-echarts', // test: /[\\/]node_modules[\\/]echarts[\\/]|[\\/]node_modules[\\/]zrender[\\/]/, // priority: 4, // reuseExistingChunk: true, // }, // default: { // minChunks: 2, // priority: -20, // reuseExistingChunk: true // } }, }) // 图片不转base64, 因为后端设置了csp策略 config.module .rule('images') .use('url-loader') .loader('url-loader') .tap(options => Object.assign(options, { limit: -1 })) config.plugins.delete('prefetch') // 去掉空闲加载 // 生产环境,开启js\css压缩 if (process.env.NODE_ENV === 'production') { config.plugin('compressionPlugin').use( new CompressionPlugin({ test: /\.(js|css|less|html)$/, // 匹配文件名 threshold: 10240, // 对超过10k的数据压缩 deleteOriginalAssets: false, // 不删除源文件 }) ) } }, devServer: { port: 3005, proxy: { "^/proxy": { // 南航UAT // target: "https://csair.joosure.com", // 阿里云 // target: "http://47.119.167.172", // yapi target: "https://yapi.081024.xyz/mock/11", // 需求映射规则 // target: "http://134.175.125.24", // 志龙电脑 // target: "http://192.168.20.168:9004", // 林伟电脑 // target: "http://192.168.20.79:9005", changeOrigin: true, pathRewrite: { '/proxy':'' } }, }, }, pages: { index: { entry: 'src/index/main.js', template: 'public/index.html', filename: 'index.html', title: '资源管理', chunks: ['chunk-vendors', 'chunk-common','chunk-antDesignVue', 'index'] }, storyMountPoint: { entry: 'src/storyMountPoint/main.js', template: 'public/storyMountPoint.html', filename: 'storyMountPoint.html', title: '指定团队和技改项目', chunks: ['chunk-vendors','chunk-common','chunk-antDesignVue', 'storyMountPoint'] }, } };