vue 配置vue.config.js 优化

    文章详细介绍了如何在Webpack配置中进行JavaScript压缩,移除console.log,生成SourceMap以支持开发调试,以及如何在生产环境中控制map文件、ESLint检查和代码分割。同时讨论了gzip压缩和优化CSS资源的方法。

    摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    1.压缩js ,去除打印信息。
    module.exports = {
      configureWebpack: {
        optimization: {
          minimize: true, // 确保启用了压缩
          minimizer: [
            new TerserPlugin({
              terserOptions: {
                // 在这里放入你的自定义Terser选项
                compress: {
                  drop_console: true, // 例如,移除console.log语句
                  // 更多Terser的压缩选项...
                },
              },
            }),
          ],
        },
      },
    };
    
    2.去掉map文件

    这个配置用于控制是否生成生产环境的源代码映射文件,通常在生产环境中,我们会将其关闭以减少打包后的文件体积。

    module.exports = {
      productionSourceMap: false
    };
    3.去掉eslint 检查
    module.exports = {
     // eslint-loader 是否在保存的时候检查 安装@vue/cli-plugin-eslint有效
      lintOnSave: false,
    };
    4. config.devtool = "source-map"
    • 这个配置项是 Webpack 的一个选项,用于设置开发环境下生成的 Source Map 的类型。
    • 将其设置为 "source-map" 会生成一个独立的 Source Map 文件,以 .map 结尾,用于将编译后的代码映射回原始源代码。
    • 使用 "source-map" 类型的 Source Map 提供了最好的调试体验,因为它会生成详细的映射文件,可以精确地将错误定位到源代码的位置。
    • 在开发环境中开启 Source Map 有助于提高调试效率,但会增加构建时间和打包后文件的体积。
     configureWebpack: config => {
        if (process.env.NODE_ENV === 'production') {
          // 为生产环境修改配置...
          config.mode = 'production'
          config.devtool = "source-map";
        } else {
          // 为开发环境修改配置...
          config.mode = 'development'
        }
    }
    5.  config.plugins.delete("prefetch").delete("preload")
    • config.plugins.delete("prefetch"):这行代码删除了 Vue CLI 默认配置中的 prefetch 插件。prefetch 插件用于在浏览器空闲时提前加载下一个页面的资源,以提升用户体验。但在某些情况下,预加载可能会影响性能,因此你可以通过这行代码将其删除,以禁用该功能。

    • config.plugins.delete("preload"):这行代码删除了 Vue CLI 默认配置中的 preload 插件。preload 插件用于在页面加载过程中提前加载指定资源,以加快页面加载速度。和 prefetch 类似,你也可以通过这行代码将其删除,以禁用预加载功能。

    configureWebpack: config => { 
       config.plugins.delete("prefetch").delete("preload")
    }
    6.代码分割
    • vendor:这个配置用于将来自 node_modules 中的模块打包到单独的 vendor 块中。chunks: 'all' 表示将所有模块都考虑到拆分中,test: /node_modules/ 表示匹配来自 node_modules 的模块,name: 'vendor' 设置了生成的块的名称,minChunks: 1 表示最少被引用一次才会被拆分出去。

    • common:这个配置用于将应用程序自身的公共模块打包到单独的 common 块中。chunks: 'all' 表示将所有模块都考虑到拆分中,test: /[\\/]src[\\/]js[\\/]/ 表示匹配应用程序中的 src/js/ 目录下的模块,name: 'common' 设置了生成的块的名称,minChunks: 2 表示至少被引用两次才会被拆分出去。

    • styles:这个配置用于将样式文件打包到单独的 styles 块中。name: 'styles' 设置了生成的块的名称,test: /\.(sa|sc|c)ss$/ 表示匹配样式文件,chunks: 'all' 表示将所有模块都考虑到拆分中,enforce: true 表示强制执行拆分。

    • runtimeChunk:这个配置用于将 Webpack 的运行时代码打包到单独的 manifest 块中,以防止重复加载。name: 'manifest' 设置了生成的块的名称。

       //代码分割(splitChunks)进行了配置,主要用于将代码拆分为不同的块,以提高应用的性能和加载速度
        config.optimization = {
          splitChunks: {
            cacheGroups: {
              vendor: {
                chunks: 'all',
                test: /node_modules/,
                name: 'vendor',
                minChunks: 1,
                maxInitialRequests: 5,
                minSize: 0,
                priority: 100
              },
              common: {
                chunks: 'all',
                test: /[\\/]src[\\/]js[\\/]/,
                name: 'common',
                minChunks: 2,
                maxInitialRequests: 5,
                minSize: 0,
                priority: 60
              },
              styles: {
                name: 'styles',
                test: /\.(sa|sc|c)ss$/,
                chunks: 'all',
                enforce: true
              },
              runtimeChunk: {
                name: 'manifest'
              }
            }
          }
        }

    7.js文件内容改变的时候改变文件hash
    module.exports = {
      configureWebpack: (config) => {
        if (process.env.NODE_ENV === 'production') {
          config.output = {
            ...config.output,
            // 设置输出文件名,只有当文件内容发生变化时,才会改变哈希值
            filename: 'js/[name].[contenthash:8].js',
            chunkFilename: 'js/[name].[contenthash:8].js',
          };
        }
      }
    };
    8.css文件内容改变的时候改变文件hash
      css: {
        extract: {
          filename: 'css/[name].[contenthash:8].css',
          chunkFilename: 'css/[name].[contenthash:8].css',
        },
     }
    9.gzip压缩 compression-webpack-plugin

    在这个配置中:

    • filename:设置压缩后的文件名,这里采用了 [path][base].gz,表示将原始文件的路径和文件名保持不变,并在文件名后面添加 .gz 扩展名。
    • algorithm:设置压缩算法,这里使用了 gzip 算法。
    • test:设置要压缩的文件类型,这里配置了压缩 JavaScript、CSS、HTML 和 SVG 文件。
    • threshold:设置文件大小的阈值,只有大于等于该阈值的文件才会进行压缩,这里设置为 10KB。
    • minRatio:设置压缩比例的阈值,只有压缩后的文件大小与原始文件大小的比例达到指定的阈值以上才会进行压缩,这里设置为 0.8,表示压缩比例达到 80% 以上才会进行压缩。

    通过以上配置,就可以使用 compression-webpack-plugin 插件对输出的 JavaScript、CSS、HTML 和 SVG 文件进行压缩,并生成对应的 .gz 文件。

    npm install compression-webpack-plugin --save-dev
     

    const CompressionPlugin = require('compression-webpack-plugin');
    
    module.exports = {
      configureWebpack: {
        plugins: [
          new CompressionPlugin({
            filename: '[path][base].gz',
            algorithm: 'gzip',
            test: /\.(js|css|html|svg)$/,
            threshold: 10240, // 大于等于10kb的文件才进行压缩
            minRatio: 0.8, // 压缩比例达到0.8以上才进行压缩
          })
        ]
      }
    };
    
    10.压缩css  optimize-css-assets-webpack-plugin

    optimize-css-assets-webpack-plugin 可以用于在 webpack 构建过程中优化和压缩 CSS 资源。它可以帮助你定制 CSS 压缩的行为,包括压缩选项和其他配置

    npm install optimize-css-assets-webpack-plugin --save-dev
     

    const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    
    module.exports = {
      configureWebpack: {
        optimization: {
          minimizer: [
            new OptimizeCSSAssetsPlugin({
              cssProcessorOptions: {
                // 在这里放入你的自定义 CSS 压缩选项
                discardComments: { removeAll: true }, // 移除注释
                // 更多 CSS 压缩选项...
              }
            })
          ]
        }
      }
    };
    

    在这个配置中:

    • OptimizeCSSAssetsPlugin:创建了一个优化 CSS 资源的 webpack 插件实例。

    • cssProcessorOptions:这是插件的配置选项,用于指定 CSS 压缩器的选项。

    cssProcessorOptions 中,你可以放入自定义的 CSS 压缩选项。例如,discardComments: { removeAll: true } 表示移除 CSS 中的所有注释,这有助于减小文件体积。

    评论 2
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值
    程序员都在用的中文IT技术交流社区

    程序员都在用的中文IT技术交流社区

    专业的中文 IT 技术社区,与千万技术人共成长

    专业的中文 IT 技术社区,与千万技术人共成长

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    客服 返回顶部