相关loader简说
style-loader: 将css样式插入到html中css-loader: 处理@import和url相当于import/require,即将css当作模块引用处理,提供CSS-Modules方式,以及importLoaders(文档中没有太多说明,后面会贴一下找到的issues)postcss-loader: 后处理,主要通过插件执行压缩/加浏览器前缀/可用下一代css语法/监听@import等等less-loader: 或者其他的css预处理
从下到上有序执行
配置
1 | webpack.config.js |
1 | postcss.config.js |
demo中混用了在less文件中引用css文件,测试能否正常将引用的css文件被loader处理,以及modules模式下是否正常,但是!!!实际情况还是不得会在less文件中引用css文件,如都一致使用预处理语言,不会出现任何坑,都正常按照loader顺序执行
1 | base.less |
1 | main.css |
1 | index.js |
先看下效果:
解释几点:
⚠️1⃣️ 非modules模式下,在less文件中引入css文件,css文件可以被postcss-loader处理,可通过postcss-import/importLoaders实现
⚠️2⃣️ modules模式下,光使用importLoaders不能抛出被引入的css文件中的局部class,但是composes可是正常使用,同时也能被postcss-loader处理,使用postcss-import没有以上问题,所以感觉postcss-import很有用。但是webpack文档中有特意描述说开启modules的时候需要加importLoaders,但是并没有描述清楚在解决什么问题,甚至importLoaders相关说明也不多,也有人提issue,我大概看了下貌似是解决上面的1⃣️问题,如图:

但是webpack这里描述开启modules是加上importLoaders没找到解释
然后在css-loader的readme上看到说importLoaders会有变化,好像只是个临时的结局方案的味道
so,目前了解到的就这么多,有postcss-import已解决了出现的问题
CSS-Modules
记录一下css-loader开启的modules本质方式:重新命名设置的class名称,并export出去一个对象,key是原class名称,value是新class名称,在js中import后通过原class名称调用出新class使用即可
:global(classname)代表全部样式,不会被转换class名称:local(classname)显示声明局部样式class,不写标签注明的默认是局部样式
比较好的博客链接:里面有提到Stylelint马一下、这里有提到resolve-url-loader和css去重、css-loader
代码地址:demo