一、webpack介绍
webpack 是一个模块打包器。webpack的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换(transform)、打包(bundle)或包裹(packge)任何资源(resource or asset)。
二、关于webpack
优化的方法我将其分为大类
- 可以提高
webpack
打包速度,减少打包时间的优化方法 - 可以让
Webpack
打出来的包体积更小的优化方法
三、提高 Webpack 打包速度
1.优化Loader搜索范围:
对于 Loader
来说,影响打包效率首当其冲必属 Babel
了。因为 Babel
会将代码转为字符串生成 AST
,然后对 AST
继续进行转变最后再生成新的代码,项目越大,转换代码越多,效率就越低。当然了,我们是有办法优化的。我们可以优化 Loader 的文件搜索范围,在使用loader
时,我们可以指定哪些文件不通过loader
处理,或者指定哪些文件通过loader
处理,对于babel-loader
,我们还可以将 Babe
l 编译过的文件缓存起来,下次只需要编译更改过的代码文件即可,这样可以大幅度加快打包时间
2.使用多线程处理打包(HappyPack,thread-loader)
受限于Node
是单线程运行的,所以 Webpack
在打包的过程中也是单线程的,特别是在执行 Loader
的时候,长时间编译的任务很多,这样就会导致等待的情况。那么我们可以使用一些方法将 Loader
的同步执行转换为并行,这样就能充分利用系统资源来提高打包速度了
四、减少 Webpack 打包后的文件体积
1.image-webpack-loader这个loder
可以帮助我们对打包后的图片进行压缩和优化,例如降低图片分辨率,压缩图片体积等。
2.删除无用的CSS样式
有时候一些时间久远的项目,可能会存在一些CSS
样式被迭代废弃,需要将其剔除掉,此时就可以使用purgecss-webpack-plugin
插件,该插件可以去除未使用的CSS
,一般与 glob
、glob-all
配合使用。
3.以CDN方式加载资源
我们知道,一般常用的类库都会发布在CDN
上,因此,我们可以在项目中以CDN
的方式加载资源,这样我们就不用对资源进行打包,可以大大减少打包后的文件体积。
以CDN
方式加载资源需要使用到add-asset-html-cdn-webpack-plugin
插件
4.按需加载&动态加载
大家在开发单页面应用项目的时候,项目中都会存在十几甚至更多的路由页面。如果我们将这些页面全部打包进一个文件的话,虽然将多个请求合并了,但是同样也加载了很多并不需要的代码,耗费了更长的时间。那么为了首页能更快地呈现给用户,我们肯定是希望首页能加载的文件体积越小越好,这时候我们就可以使用按需加载,将每个路由页面单独打包为一个文件