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.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'
|
},
|
// 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 // 压缩比
|
// })
|
]
|
}
|
|
}
|