const path = require('path'); const resolve = dir => { return path.join(__dirname, dir); }; module.exports = { lintOnSave: false, // 设为false打包时不生成.map文件 productionSourceMap: false, publicPath: '/', outputDir: process.env.NODE_ENV === 'production' ? 'dist' : 'dist', chainWebpack: config => { config.resolve.alias .set('@', resolve('src')) // key,value自行定义,比如.set('@@', resolve('src/components')) .set('_c', resolve('src/components')); // 添加 raw-loader 来解析 bpmn 文件 config.module .rule('bpmn') .test(/\.bpmn$/) .use('raw-loader') .loader('raw-loader') .end() // config.module // .rule('replace-dialog-class-loader') // .test(/\.less$/) // //添加exclude选项,其值是数组 // .exclude.add('/node_modules/').end() // .use('./src/loader/replace-dialog-class-loader') // .loader('./src/loader/replace-dialog-class-loader') // .end() }, configureWebpack: config => { if (process.env.NODE_ENV === 'production') { // 保持类名不被压缩 这样keep-alive的include才有效 config.optimization.minimizer[0].options.terserOptions.keep_fnames = true; config.mode = 'production' config.performance = { maxEntrypointSize: 10000000, maxAssetSize: 30000000 } } // https://segmentfault.com/q/1010000014954264 config.optimization.runtimeChunk = 'single'; /** * 打包说明 * splitChunks: 将所有的库进行打包,并决定哪些分离出来,哪些打到一起 * 1. app.[hash].js * main.js webpack打包的入口文件 * 2. chunk-[hash].[hash].js * 动态引入的包(即懒加载, 一般是路由里引入的)=> * component: () => import('@/views/error-page/500.vue') * 3. chunk-verdors.[hash].js * 第三方包会打到这里面 * 通过 cacheGroups 的 vendors 来配置; * cacheGroups 的 default 默认配置会将引入大于等于2次的包打到这里 */ config.optimization.splitChunks = { // initial 只从入口模块进行拆分,对于异步导入(比如懒加载)的文件不处理 // async 异步chunk,只对异步导入的文件处理 // all 全部chunk chunks: 'all', // 表示允许入口(页面初始化,不包括异步加载的脚本)并行加载的最大请求数 // 之所以有这个配置也是为了对拆分数量进行限制,不至于拆分出太多模块导致请求数量过多 maxInitialRequests: 8, // 分出来的包最小字节数必须大于此值,单位为Byte minSize: 200000, cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, // 生成的文件名 name(module) { const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]; return `${packageName.replace('@', '')}`; } }, viewDesign: { name: 'chunk-view-design', // split view-design into a single package priority: 10, // the weight needs to be larger than libs and app or it will be packaged into vendor or app test: /[\\/]node_modules[\\/]_?view-design(.*)/ // in order to adapt to cnpm // todo 怎么自定义单个包的域名 publicPath 只能全局设置 }, antDesignVue: { name: 'chunk-ant-design-view', priority: 10, test: /[\\/]node_modules[\\/]_?ant-design-vue(.*)/ } } }; } };