webpack学习(四) -- css tree shaking

4,147 阅读3分钟

css tree shaking

我们和webpack(三)一样,用案例说话

安装css需要的两个loader,css-loader 和style-loader

npm install css-loader style-loader -D

在项目webpack.config.js配置文件中配置

在html文件中写一些结构

创建css文件,在里面写一些页面中有的和没有的css样式,没有的用来验证css抖动

在入口文件index.js中将依赖的css文件引入

执行npm run dev

css样式被打包到出口文件中,可以看到在打包好的文件里搜索background-color能够搜到

两个插件

mini-css-extract-plugin

单独将css代码抽离成能打包的文件的插件

  • 下载
npm install --save-dev mini-css-extract-plugin
  • 在配置文件中引入

  • 在当前开发环境下载局部webpack

下载方式见webpack学习(一)

  • 执行npm run dev,会发现dist文件夹中多出main.css文件

  • 在index.html文件中引入打包后的css文件

  • 在main.js中搜索background-color,发现没搜到,是因为我们已经给样式单独打包出css文件了,js文件里就没有行内样式了

*注:单独抽离css样式和把css解析成行内样式二者不可兼得,水火不相容

到这为止这个插件已经实现了将css样式单独抽离出文件的目的啦,接下来看下一个插件,把css文件也抖一下

purifycss-webpack

支持css tree shaking的插件

  • 下载
npm i -D purifycss-webpack purify-css
  • 原理

将html里的dom结构与css里的样式进行匹配,若匹配成功则不进行抖动,当然要根据哪个文件进行抖,是需要我们手动配置规定的

  • 配置方法(先只根据一个Html进行抖动)

下图是只根据当前路径下的所有html文件进行抖动

css抖动一定要放在js之前,否则会报错。

  • 引入node的一些公共变量

  • 执行npm run dev,再看main.css中发现没有用到的都被抖掉了

上述只是dom和css能匹配的情况,那么如果我们在js里动态插入dom结构,这个插件还会好使吗?

  • js中插入dom

  • 执行npm run dev,发现a标签还是被抖掉了,没有留下来,是因为我们在配置文件中设置的是与html对比,并没有配置与js文件对比

如果想要匹配js,就可以在配置文件上再加上一条

这时候需要注意的是,我们要用到全局匹配,因此在引入glob时就需要引入glob-all,下载glob-all并引入

  • 执行npm run dev,a就不会被抖掉了

以上两个插件帮助我们把css代码做了优化,但需要注意的是,我们写在dom里的到是被注释掉的dom结构,是不会被抖掉的哦,所以上线前,把注释的代码清空,也会提升性能哦~

结尾

webpack的学习还在继续~文章也会持续更新哦~若我的文章里有错误或问题,请及时联系我,v:lin2537421241