近年来,随着前端技术的快速发展,项目结构也越来越复杂,管理和处理这些复杂的项目也成为开发者面临的一大难题。然而webpack和它的一系列插件化思想为我们解决了这个难题,其中 mini-css-extract-plugin 就是其中之一,是我们常用工具,那么它究竟能帮我们做什么呢?
CSS提取的需求
在web开发中,我们通常会将CSS样式通过JavaScript动态地添加到页面中,也就是说,CSS内容会被包含在JavaScript文件里。但在生产环境中,我们希望CSS和JavaScript分开,这样就可以同时加载它们,降低了主体JavaScript文件的大小,提升了网页加载速度。为了实现这个需求,mini-css-extract-plugin 应运而生。
mini-css-extract-plugin:何时?
在你的代码中引入一个CSS文件时,比如import './styles.css',webpack会把这个文件识别为一个模块,并将其内容作为字符串加载到内存中。然后,mini-css-extract-plugin在每一个样式文件对应的模块中插入一个新的CSS依赖。这个新的依赖的类型是CssDependency,它包含了原CSS文件的内容以及关于如何去写入这个内容到新的独立文件的信息。
mini-css-extract-plugin:如何?
其实,mini-css-extract-plugin更细致的过程是,首先,webpack会使用css-loader将CSS样式通过JavaScript动态添加到页面中,这意味着CSS内容会被包含在JavaScript文件里。然后,mini-css-extract-plugin会在webpack打包过程中的emit阶段使用CssDependencyTemplate去处理所有的CssDependency,并以此生成新的CSS文件。每一个CssDependency对象将它内部的CSS内容写入到这个新的CSS文件中。这就是mini-css-extract-plugin工作的基本原理。
处理 .vue 文件
当你使用 Vue.js 并且采用了 .vue 单文件组件时,你可能会在这些文件里直接书写 CSS 样式。而 mini-css-extract-plugin 插件也能适应这样的情况,它依旧可以将这些内嵌样式提取出来并生成独立的 CSS 文件。
我们先要安装和应用必要的loader。一般默认情况下,webpack并不识别 .vue 文件类型的模块,所以我们需要引入 vue-loader 来解析和处理 .vue 文件。同样的,要处理 .vue 文件中的样式部分,也需要使用到 css-loader。
随后 vue-loader 会解析 .vue 文件,将它分成三个部分:template、script、style。这三部分分别对应 HTML、JavaScript、CSS,vue-loader 会分别处理它们:将 HTML 和 JavaScript 转换为 JS 模块,CSS 内容将以字符串的形式输出。
最后,mini-css-extract-plugin 就会像处理普通 CSS 文件一样,将所有搜集到的 CSS 内容生成一个新的、独立的 CSS 文件。这样,在 .vue 文件中写的样式也都能被 mini-css-extract-plugin 找到并提取出来。
总结
无论你是使用普通的.css文件,还是.vue单文件组件,只要你的项目使用了 webpack,mini-css-extract-plugin 都是一个极好的选择。它可以帮你将 CSS 文件合理地提取到一个独立的文件中,大大提升了网站的加载和运行性能。如果你还没有使用它,那么现在就去试试吧!