插件简介 mini-css-extract-plugin
打包css文件,将不同文件中的css代码提取到一个独立的文件中,对css代码进行代码压缩等。
在 Taro 中,一个 css 文件只要被使用超过 2次及以上,默认就会通过该插件将css文件内容提取到公共的样式文件中。
比如1个组件被引入2次,那么该组件的
css样式就会被提取到公共样式中。
而在css中,相同权重的选择器,加载顺序越后的权重越高:相同权重下,后加载的样式会覆盖之前的。
编译警告
在我们对项目进行编译或者打包的时候,有时会遇到如下的 Warning 输出:
chunk common [mini-css-extract-plugin]
Conflicting order. Following module has been added:
* css xxx/icon.less
despite it was not able to fulfill desired ordering with these modules:
* css xxx/price.less
- couldn't fulfill desired order of chunk group(s) pageA
- while fulfilling desired order of chunk group(s) pageB,pageC
这是因为在我们的项目中,相同的几个样式文件,在不同的页面或组件中引入顺序不一致,插件提取样式到公共文件时,无法同时满足几个页面下的不同加载顺序。
比如,我们代码中的引入顺序是这样的:
// pageA
import 'xxx/icon.less';
import 'xxx/price.less';
// pageB、pageC
import 'xxx/price.less';
import 'xxx/icon.less';
可以看到 icon.less、price.less文件都被多次引入了,会被打包到同一个公共的样式文件中。那此时这2个文件,哪一个内容被先打包(放前面)呢?如果 icon.less 放前面,满足了 pageA 页面,但是不满足 pageB、pageC;反之,也是一样的。所以在这种情况下,plugin 输出了一个 Warning,并选择了一个相对最优的解。
解决方案
那我们应该怎么解决这个问题?
首先,需要判断在我们的项目中,这种不同的css文件,有没有 CSS样式 是通过加载的顺序进行优先级覆盖的
- 没有:那我们可以不用关心加载的优先级顺序,直接添加如下配置忽略这个警告
// config/index.js 中添加如下配置
mini: {
miniCssExtractPluginOption: {
ignoreOrder: true,
}
}
- 有:则需要根据
Warning进行修正,如:将不同文件中的这种引入顺序保持统一