'use strict' const path = require('path') const webpack = require('webpack') const { defineConfig } = require('@vue/cli-service') const name = process.env.VUE_APP_TITLE || '中正企业信息' // 网页标题 const CompressionWebpackPlugin = require("compression-webpack-plugin"); function resolve(dir) { return path.join(__dirname, dir) } module.exports = defineConfig({ transpileDependencies: true, lintOnSave: false, devServer: { host: '0.0.0.0', port: 5099, open: true, }, configureWebpack: { output: { // 输出重构 打包编译后的 文件名称 【模块名称.版本号.时间戳】 filename: `js/[name].[hash].js`, chunkFilename: `js/[id].[hash].js` }, name: name, // 生产环境,则添加不参与打包的包名和依赖包的名称 externals: { 'vue': 'Vue', 'axios': 'axios', 'element-ui': 'ELEMENT', 'vue-router': 'VueRouter', }, resolve: { alias: { '@': resolve('src') } } }, chainWebpack(config) { // 生产环境,开启js\css压缩 if (process.env.NODE_ENV !== 'development') { config.plugin('compressionPlugin').use(new CompressionWebpackPlugin({ test: /\.(js|css|less|map)$/, // 匹配文件名 threshold: 1024, // 对超过10k的数据压缩 minRatio: 0.8, })) } config.plugin('provide').use(webpack.ProvidePlugin, [{ 'window.Quill': 'quill' }]) config.module .rule('svg') .exclude.add(resolve('src/assets/icons')) .end() config.module .rule('icons') .test(/\.svg$/) .include.add(resolve('src/assets/icons')) .end() .use('svg-sprite-loader') .loader('svg-sprite-loader') .options({ symbolId: 'icon-[name]' }) .end() config .when(process.env.NODE_ENV !== 'development', config => { config .plugin('ScriptExtHtmlWebpackPlugin') .after('html') .use('script-ext-html-webpack-plugin', [{ // `runtime` must same as runtimeChunk name. default is `runtime` inline: /runtime\..*\.js$/ }]) .end() config .optimization.splitChunks({ chunks: 'all', minSize: 1005000, maxSize: 3005000, cacheGroups: { libs: { name: 'chunk-libs', test: /[\\/]node_modules[\\/]/, priority: 10, chunks: 'initial' // only package third parties that are initially dependent }, elementUI: { name: 'chunk-elementUI', // split elementUI into a single package priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm }, commons: { name: 'chunk-commons', test: resolve('src/components'), // can customize your rules minChunks: 3, // minimum common number priority: 5, reuseExistingChunk: true } } }) config.optimization.runtimeChunk('single'), config.optimization.providedExports = true, config.optimization.usedExports = true, config.optimization.innerGraph = true, config.optimization.sideEffects = true, { from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件 to: './' //到根目录下 } } ) } })