purgecss-webpack-plugin
用于完成 css tree sharking 的插件,减少部分包体积
优点
可以移除无用代码
缺点
1. 需要抽出 scss/css/less/styl/sass 文件 使用引入的方式而不是内联
2. 无法处理的几种情况
被注释的代码
动态拼接的代码(情况多种)
3. 构建速度变慢,增加打包负担
配置
1 | const path = require('path') |
钩子介绍
1.1 compiler钩子介绍
1.2 conpilation 钩子介绍
使用到的部分钩子
compiler.hooks.compilation:当 compilation 被创建之后调用
compiler.hooks.done:编译完成后执行
compilation.hooks.additionalAssets:为编译(compilation)创建附加资源(asset)
参数介绍
compilation.assets:所有需要输出的资源会存放在 compilation.assets
中,compilation.assets
是一个键值对,键为需要输出的文件名称,值为文件对应的内容。
compilation.chunks:Compilation中由chunks组成的数组(构建输出)。 每个chunk管理最终渲染资源的组合。
原理简介
- compilation.hooks.additionalAssets 钩子派发通知的时候,从 compilation.assets(键名是输出资源文件名) 对象里找到键名包含后缀 .css 的
- 从要处理的文件路径中,过滤出不包含 styleExtensions ( [‘.css’, ‘.scss’, ‘.styl’, ‘.sass’, ‘.less’])数组中后缀的文件路径
- 从上面过滤完的路径,读文件,
content.match(/[A-Za-z0-9_-]+/g)
,正则匹配出包含这些的字段,存到 set 里。 - 将 css 解析成 ast,遍历 ast 节点,如果节点的选择器名不在 set 里,就被移除
补充
1.1 Array.from
语法
1 | Array.from(arrayLike[, mapFn[, thisArg]]) |
参数
arrayLike
想要转换成数组的伪数组对象或可迭代对象。
mapFn
可选如果指定了该参数,新数组中的每个元素会执行该回调函数。
thisArg
可选可选参数,执行回调函数
mapFn
时this
对象。
返回值
一个新的数组
实例。
1.2 Generator.prototype.return()
return()
方法返回给定的值并结束生成器。
1.3 Object.getOwnPropertyDescriptors()
Object.getOwnPropertyDescriptors()
方法用来获取一个对象的所有自身属性的描述符。
方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。
1 | var obj = {}; |