1
mayisheng
2022-08-15 81f54040c2cb65537c6c6e1db8358a39a57dea0d
vue.config.js
@@ -1,62 +1,104 @@
const path = require("path");
const CopywebpackPlugin = require("copy-webpack-plugin");
const dvgisDist = "./node_modules/@dvgis";
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')
//减少chunk-vendors.js文件大小
// const webpack = require("webpack");
// const CompressionWebpackPlugin = require("compression-webpack-plugin");
// const productionGzipExtensions = ["js", "css"];
// const isProduction = process.env.NODE_ENV === "production";
const productionGzipExtensions = ['js', 'css']
module.exports = {
  publicPath: "/",
  lintOnSave: false,
    publicPath: '/',
    lintOnSave: false,
    // 其他配置
    chainWebpack: (config) => {
        config.plugins.delete('prefetch')
  // 其他配置
  chainWebpack: (config) => {
    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/mx",
          to: "mx",
        },
      ],
    ]);
  },
  //减少chunk-vendors.js文件大小  报错 TypeError: Cannot read property 'tapPromise' of undefined
  //   configureWebpack: {
  //     resolve: {
  //       alias: {
  //         "@": path.resolve(__dirname, "./src"),
  //         "@i": path.resolve(__dirname, "./src/assets"),
  //       },
  //     },
  //     plugins: [
  //       new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
        config.module.rule('images')
            .test(/\.(png|jpe?g|gif|svg)(\?.*)?$/)
            .use('image-webpack-loader')
            .loader('image-webpack-loader')
            .options({ bypassOnDebug: true })
  //       // 下面是下载的插件的配置
  //       new CompressionWebpackPlugin({
  //         algorithm: "gzip",
  //         test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"),
  //         threshold: 10240,
  //         minRatio: 0.8,
  //       }),
  //       new webpack.optimize.LimitChunkCountPlugin({
  //         maxChunks: 5,
  //         minChunkSize: 100,
  //       }),
  //     ],
  //   },
};
        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 // 压缩比
            // })
        ]
    }
}