const path = require('path') const CopywebpackPlugin = require('copy-webpack-plugin') const dvgisDist = './node_modules/@dvgis' const webpack = require('webpack') // 减少chunk-vendors.js文件大小 const CompressionPlugin = require('compression-webpack-plugin') const productionGzipExtensions = ['js', 'css'] module.exports = { // publicPath: '/zhxy', publicPath: '/zhjg', lintOnSave: false, // 其他配置 chainWebpack: (config) => { config.plugins.delete('prefetch') config.module.rule('images') .test(/\.(png|jpe?g|gif|svg)(\?.*)?$/) .use('image-webpack-loader') .loader('image-webpack-loader') .options({ bypassOnDebug: true }) config.plugin('copy').use(CopywebpackPlugin, [ [ { from: path.join(dvgisDist, 'dc-sdk/dist/resources'), to: 'libs/dc-sdk/resources' }, { from: './public/img', to: 'img' }, { from: './public/examples', to: 'examples' }, // { // from: './public/fz', // to: 'fz' // }, { from: './public/favicon.ico', to: 'favicon.ico' }, { from: './public/depend', to: 'depend' } // { // from: './public/mx', // to: 'mx' // }, // { // from: './public/wp', // to: 'wp' // }, // { // from: './public/qx', // to: 'qx' // } ] ]) // config.plugin('webpack-bundle-analyzer') // .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin) }, // 减少chunk-vendors.js文件大小 // 报错 TypeError: Cannot read property 'tapPromise' of undefined // 解决 ,把compression-webpack-plugin包退回成 compression-webpack-plugin@5.0.1 即可 // 文件由8M 减成2.5M productionSourceMap: false, // 代码压缩加密 configureWebpack: { externals: { vue: 'Vue', Vuex: 'Vuex', 'vue-router': 'VueRouter', 'element-ui': 'ELEMENT', echarts: 'echarts' // '@dvgis/dc-sdk/dist/dc.base.min': 'DC', // '@dvgis/dc-sdk/dist/dc.core.min': 'DcCore', // '@dvgis/dc-sdk/dist/dc.chart.min': 'DcChart', // '@dvgis/dc-sdk/dist/dc.mapv.min': 'DcMapv', // '@dvgis/dc-sdk/dist/dc.s3m.min': 'DcS3M' }, // webpack plugins plugins: [ // Ignore all locale files of moment.js new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), // 配置compression-webpack-plugin压缩 new CompressionPlugin({ algorithm: 'gzip', test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'), threshold: 10240, minRatio: 0.8 }), new webpack.optimize.LimitChunkCountPlugin({ maxChunks: 5, minChunkSize: 100 }) // 提供带 Content-Encoding 编码的压缩版的资源 // new CompressionPlugin({ // algorithm: 'gzip', // test: /\.js$|\.html$|\.css/, // 匹配文件名 // // test: /\.(js|css)$/, // threshold: 10240, // 对超过10k的数据压缩 // deleteOriginalAssets: false, // 不删除源文件 // minRatio: 0.8 // 压缩比 // }) ] }, devServer: { https: true // https:{type:Boolean} } }