| | |
| | | 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: '/', |
| | | lintOnSave: false, |
| | | // 其他配置 |
| | | chainWebpack: (config) => { |
| | | config.plugin('copy').use(CopywebpackPlugin, [ |
| | | [ |
| | | { |
| | | from: path.join(dvgisDist, 'dc-sdk/dist/resources'), |
| | | to: 'libs/dc-sdk/resources' |
| | | publicPath: '/', |
| | | 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/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' |
| | | }, |
| | | { |
| | | from: './public/img', |
| | | to: 'img' |
| | | }, |
| | | { |
| | | from: './public/examples', |
| | | to: 'examples' |
| | | }, |
| | | { |
| | | from: './public/mx', |
| | | to: 'mx' |
| | | }, |
| | | { |
| | | from: './public/wp', |
| | | to: 'wp' |
| | | }, |
| | | { |
| | | from: './public/favicon.ico', |
| | | to: 'favicon.ico' |
| | | } |
| | | ] |
| | | ]) |
| | | }, |
| | | // 减少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: { |
| | | // webpack plugins |
| | | plugins: [ |
| | | // 提供带 Content-Encoding 编码的压缩版的资源 |
| | | new CompressionPlugin({ |
| | | algorithm: 'gzip', |
| | | test: /\.js$|\.html$|\.css/, // 匹配文件名 |
| | | // test: /\.(js|css)$/, |
| | | threshold: 10240, // 对超过10k的数据压缩 |
| | | deleteOriginalAssets: false, // 不删除源文件 |
| | | minRatio: 0.8 // 压缩比 |
| | | }) |
| | | ] |
| | | } |
| | | // 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 // 压缩比 |
| | | // }) |
| | | ] |
| | | } |
| | | |
| | | } |