const path = require('path') const terserPlugin = require('terser-webpack-plugin') module.exports = { publicPath: '/', productionSourceMap: false, devServer: { disableHostCheck: true, open: true, port: 8888, // 开发环境默认开启反向代理,如果不需要请自行注释 proxy: { '/tduck-api': { target: 'http://localhost:8999', changeOrigin: true } } }, configureWebpack: config => { config.resolve.modules = ['node_modules'] config.resolve.alias = { '@': path.resolve(__dirname, 'src') } config.optimization = { minimizer: [ //https://webpack.docschina.org/plugins/terser-webpack-plugin/ new terserPlugin({ terserOptions: { compress: { warnings: false, drop_console: true, drop_debugger: true, pure_funcs: ['console.log'] } } }) ] } }, chainWebpack: config => { const oneOfsMap = config.module.rule('scss').oneOfs.store oneOfsMap.forEach(item => { item.use('sass-resources-loader') .loader('sass-resources-loader') .options({ resources: [ './src/assets/styles/resources/*.scss', ] }) .end() }) config.module .rule('svg') .exclude.add(path.join(__dirname, 'src/assets/icons')) .end() config.module .rule('icons') .test(/\.svg$/) .include.add(path.join(__dirname, 'src/assets/icons')) .end() .use('svg-sprite-loader') .loader('svg-sprite-loader') .options({ symbolId: 'icon-[name]' }) .end() config.plugin('html') .tap(args => { args[0].title = process.env.VUE_APP_TITLE args[0].debugTool = process.env.VUE_APP_DEBUG_TOOL return args }) .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', 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 } } }) } ) } }