发布于 2026-01-06 3 阅读
0

减少 webpack 打包大小的几种方法 | JS SECRETS DEV 的全球展示挑战赛,由 Mux 呈现:展示你的项目!

减少 webpack 打包文件大小的几种方法 | JS 秘籍

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

宣传图片

原始图片来源:https://images.ctfassets.net/nj2caiz7hkjw/3VoFdDTP5SowwESKIOAgm/a111ddd784928b61045c8e811e1769be/webpack.png

根据webpack 官方网站的介绍,webpack 是一个用于现代 JavaScript 应用的静态模块打包工具。当 webpack 处理你的应用时,它会在内部构建一个依赖关系图,该图映射了项目所需的每个模块,并生成一个或多个打包文件

Webpack 可以与独立的任务运行器一起负责打包。然而,由于社区开发的 Webpack 插件,打包器和任务运行器之间的界限变得模糊不清。有时,这些插件会执行一些通常在 Webpack 之外完成的任务,例如清理构建目录或部署构建。

它主要是一个 JavaScript 模块打包工具,但也可以转换所有前端资源,例如 HTML、CSS 甚至图片。它可以让你更好地控制应用程序发出的 HTTP 请求数量,并允许你使用其他类型的资源(例如 Pug、Sass 和 ES8)。Webpack 还允许你轻松地使用 npm 上的包。

Webpack 是一个很棒的静态打包工具,适用于你的 JavaScript 应用程序,但是当 Webpack 打包后的文件大小增加时,情况可能会变得有点混乱,它会大大降低 JavaScript 应用程序的加载速度。

以下是一些可以有效减小 webpack 打包文件大小的好方法:

吊装

作用域提升采用了一种更智能的方式将模块添加到捆绑包中。

吊装作业可以做什么:

● 加快 JavaScript 在浏览器中的执行速度

● 可以减小打包文件的大小

我该怎么做?

在 webpack.config.js 文件的插件部分添加以下一行代码:

​​ webpack.optimize.ModuleConcatenationPlugin()
Enter fullscreen mode Exit fullscreen mode

不过,它需要 webpack 3 或更高版本。

在生产环境中使用 Webpack 4

这一点非常重要,因为在生产环境中使用 webpack 4 会自动移除所有不必要的空格、换行符等。它还可以告知某些包不要包含调试代码。

我该怎么做?

创建你的生产环境包,如下所示

webpack -p --mode=production
Enter fullscreen mode Exit fullscreen mode

它的功能:

● 启用 UglifyJS 压缩

● 将 NODE_ENV 设置为生产环境

使用 LODASH-WEBPACK-PLUGIN

如果你在 JavaScript 项目中使用 lodash,不妨试试 lodash-webpack-plugin 这个插件。它可以移除你不需要的 lodash 功能,从而显著减小打包后的文件大小。

我该怎么做?

使用以下命令从 npm 安装依赖项

npm install lodash-webpack-plugin -save--dev
Enter fullscreen mode Exit fullscreen mode

然后在 webpack.config.js 文件的顶部引入该模块:

​​ LodashModuleReplacementPlugin = ​require​(​’lodash-webpack-plugin’​);
Enter fullscreen mode Exit fullscreen mode

在 webpack.config.js 文件的插件部分添加这行代码。

new LodashModuleReplacementPlugin
Enter fullscreen mode Exit fullscreen mode

使用捆绑分析工具

webpack 生成的 bundle 文件无法直接读取。但借助 bundle 分析器,用户可以在交互式树状图中可视化输出的 bundle 文件。

我该怎么做?

有很多 webpack 打包分析工具。在我看来,以下两个是最好的:

https://github.com/th0r/webpack-bundle-analyzer

https://github.com/danvk/source-map-explorer

摇树

Tree shaking 是将死代码从代码包中移除的过程。死代码是指那些被导出但未被任何地方导入的代码。

我该怎么做?

1)使用 ES6 模块语法

请尽可能使用 ES6 模块,并按模块名称导入。例如:

import { connect } ​from ”react-redux”​; ​​ ​
Enter fullscreen mode Exit fullscreen mode

而不是:

​​ import reactRedux ​from ”react-redux”​; ​​ ​
Enter fullscreen mode Exit fullscreen mode

2) 更新 .babel.rc 文件

在你的 babel 配置中添加 modules: false(通常在 . babel.rc 中)。

如果您使用的是 es2015 预设,它应该看起来像这样:

presets: [[​”es2015"​, { ​”modules”​: ​false​ }] ]
Enter fullscreen mode Exit fullscreen mode

如果您使用的是 babel-preset-env,那么它应该看起来像这样:

presets: [[​”env”​, { ​”modules”​: ​false​ }] ]
Enter fullscreen mode Exit fullscreen mode

3) 请确保您使用的是 webpack 2 或更高版本。

代码分割

使用 webpack,您可以将整个打包文件拆分成许多较小的文件,并仅加载每个页面所需的文件包。您甚至可以异步加载文件包!

例如,如果您有一个模态框,那么您可以进行代码拆分,仅在用户点击打开模态框的按钮时才加载该模态框的代码。这会增加页面加载时间,因为在页面初始加载时不会加载任何模态框代码。

我该怎么做?

阅读更多关于代码分割工作原理的内容:

代码分割

参考

https://survivejs.com/webpack/what-is-webpack/

https://www.sitepoint.com/beginners-guide-webpack-module-bundling/

https://webpack.js.org/concepts

原文发表于 sheddynathan.me

文章来源:https://dev.to/coder_blvck/possible-ways-to-reduce-your-webpack-bundle-size-js-secrets-550