webpack4代码压缩基本方法

本文介绍的是webpack4的3个基本代码压缩方法,可以解决一部分同学打包文件过大的问题。

但是大家注意,仅仅在production环境再应用这些机制,否则开发的时候会遇到编译太慢或者无法热加载代码的问题。

首先定义下面的变量,用于判断当前编译的是否是生产环境,将其写在webpack.config.js文件头部:

下面则是webpack.config.js配置的一部分,那么后续将根据isProduction来决定向conf.optimization/conf.plugins中加入哪些压缩插件。

压缩JS:uglifyjs-webpack-plugin

该插件用于压缩js代码,最终编译结果就是只有一行内容的密密麻麻的很长很长的JS文件,好处就是文件变小了。

上述配置项的意思是:将.js文件压缩,采用多线程并发,删除JS代码中的注释。

提取CSS:mini-css-extract-plugin

该插件用于把CSS提取到独立的文件中,这样JS和CSS可以作为2个请求并行下载,页面打开速度可以再快一些。

在以前的webpack版本中都是使用extract-text-webpack-plugin,但是在webpack4中已经改为mini-css-extract-plugin了。

注意,只有在isProduction==true的时候再加入这个插件。

除了加入plugins之外,还需要在css的loader部分进行修改:

一般我们webpack配置都是css-loader+style-loader,但是这样的话css是编译在JS里的,并且页面打开时js会把css写到<head>中的<style>标签中。

为了在生产环境加速,我们在处理css文件的最后利用mini-css-extract-plugin提供的loader,把css输出到独立的css文件中去,这样js文件中就没有样式相关的代码了。

大家要注意,在生产环境是使用mini-css-extract-plugin取代style-loader,在开发环境则依旧使用style-loader即可,因为大概了解了一下mini-css-extract-plugin对css修改的热加载支持不是很完善,为了不影响开发体验,其作者也建议仅在生产编译时使用。

压缩CSS:optimize-css-assets-webpack-plugin

该插件配合mini-css-extract-plugin使用,对其输出的css文件进一步压缩,删除空白和注释等。

把它创建出来,加入到plugins即可,再去看看css会发现css文件也变成了密密麻麻的一行。

HTTP压缩

最后,别忘记给你的webserver开启gzip压缩,效果非常显著。

其他

在项目比较大的时候,编译过程中遇到了nodejs OOM内存耗尽的问题,这需要通过调大nodejs的内存限制解决。

因为我是通过npm run build命令间接执行的webpack程序,因此只能通过linux环境变量的方式来间接影响nodejs的内存限制,即在编译production环境的时候导出如下环境变量:

其中NODE_ENV是用于声明编译环境,之前我们在webpack.config.js中有过判定逻辑。

NODE_OPTIONS相当于nodejs的命令行参数,我们传递max-old-space-size=4096用于配置内存限制为4GB,避免编译过程OOM。

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~