webpack打包经验——处理打包文件体积过大的问题

前言

最近对一个比较老的公司项目做了一次优化,处理的主要是webpack打包文件体积过大的问题。

这里就写一下对于webpack打包优化的一些经验。

主要分为以下几个方面:

  1. 去掉开发环境下的配置
  2. ExtractTextPlugin:提取样式到css文件
  3. webpack-bundle-analyzer:webpack打包文件体积和依赖关系的可视化
  4. CommonsChunkPlugin:提取通用模块文件
  5. 提取manifest:让提取的公共js的hash值不要改变
  6. 压缩js,css,图片
  7. react-router 4 之前的按需加载
  8. react-router 4 的按需加载
  9. react v16.6之后 的按需加载(2019.07.04更新)

本篇博客用到的webpack插件如何配置都可以去查看我写的这篇博客:

【Webpack的使用指南 02】Webpack的常用解决方案

这里就不细讲这些配置了。

去掉开发环境下的配置

比如webpack中的devtool改为false,不需要热加载这类只用于开发环境的东西。

这些不算是优化,而算是错误了。

对于在开发环境下才有用的东西在打包到生产环境时通通去掉。

ExtractTextPlugin:提取样式到css文件

将样式提取到单独的css文件,而不是内嵌到打包的js文件中。

这样带来的好处时分离出来的css和js是可以并行下载的,这样可以更快地加载样式和脚本。

解决方案:

安装ExtractTextPlugin

npm i --save-dev extract-text-webpack-plugin

然后修改webpack.config.js为:

const ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {
  // ...
  plugins: [
    // ...
    new ExtractTextPlugin({ filename: '[name].[contenthash].css', allChunks: false }),
  ],
  module: {
    rules: [
      {
        test: /\.css$/,
        exclude: /node_modules/,
        use: ExtractTextPlugin.extract({
          fallback: 'style-loader',
          use: ['css-loader?modules', 'postcss-loader'],
        }),
      }, {
        test: /\.css$/,
        include: /node_modules/,
        use: ExtractTextPlugin.extract({
          fallback: 'style-loader',
          use: ['css-loader', 'postcss-loader'],
        }),
      },
      {
        test: /\.less$/,
        use: ExtractTextPlugin.extract({
          fallback: 'style-loader',
          use: ['css-loader?modules', 'less-loader', 'postcss-loader'],
        }),
      },
    ],
  },
}

打包后生成文件如下:

746209-20180718103735536-374561884.png

webpack-bundle-analyzer:webpack打包文件体积和依赖关系的可视化

这个东西不算是优化,而是让我们可以清晰得看到各个包的输出文件体积与交互关系。

安装:

npm install --save-dev webpack-bundle-analyzer

然后修改webpack.config.js:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您的 Vue 3.0 代码量过大导致 webpack 打包失败,我可以提供一些解决方案: 1. 优化代码:首先,检查您的代码是否存在重复、冗余或不必要的部分。尽量使用模块化的方式组织代码,避免在全局范围内定义过多的变量和函数。使用 webpack 的代码拆分功能,将大型代码库拆分成较小的模块,按需加载。 2. 使用动态导入:Vue 3.0 支持使用动态导入(dynamic import)来按需加载组件和模块。通过这种方式,可以减少初始加载的代码量,提高应用的性能。您可以将一些不常用或初始加载时不必要的组件放在异步加载中,以减小初始打包体积。 3. 配置优化插件:在 webpack 配置中,您可以使用一些插件来优化打包结果。例如,使用 TerserWebpackPlugin 来进行代码压缩和混淆,使用 HtmlWebpackPlugin 自动生成 HTML 文件,并自动注入打包后的资源。 4. 按需加载第三方库:如果您在项目中使用了一些较大的第三方库(如图表库、富文本编辑器等),可以考虑按需加载它们的模块。这样可以避免将整个库打包到最终的 bundle 文件中,减小打包体积。 5. 考虑使用CDN:对于一些通用的库或框架,您可以考虑使用 CDN(内容分发网络)来引入它们,而不是将其打包到项目中。这可以减小打包体积并加快页面加载速度。 6. 升级 webpack 版本:如果您使用的是较旧的 webpack 版本,尝试升级到最新版本。每个 webpack 版本都有不同的优化和改进,可能会有助于解决打包失败的问题。 希望以上建议对您有所帮助!如果问题仍然存在,请提供更多详细信息,我将尽力提供更具体的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值