先看 webpack.config.dev.js 里的相关代码:
1 | // style files regexes |
4 个 样式文件后缀的正则表示,这份配置里是将普通 (s)css 文件和 (s)css module 文件是按文件名后缀不同而区分对待的,前者视为普通 css 文件,而处理后者时开启 css-loader 的 module 模式。这样做的一个好处是区分明确,全局的 class 样式加写到 .(s)css 文件里,需要加 hash 的局部样式就写到 .module.(s)css 文件里,这样也可以不用在想要写一个全局样式时把 class 包到 :global() 里了。
getStyleLoaders 是一个返回 loader 配置的函数,内部默认有 [‘style-loader’, ‘css-loader’, ‘postcss-loader’] 三个 loader。函数接受两个参数,其中第一个是 css-loader 的 option 配置。第二个是视需要添加 sass-loader 或者 less-loader。需要添加 postcss 插件,可以在 getStyleLoaders 里对应的 plugin 配置里加。以上就是 development 下关于样式的配置,下面看看 production 里不一样的地方:
1 | // style-loader 换成了下面的内容 |
此外配置里还多了 mini-css-extract-plugin、optimize-css-assets-webpack-plugin、postcss-safe-parser 这三个东西,第一个的作用是将构建后的 css 样式,生成 .css 文件,然后以 link 标签的形式插入到模板 html 中;第二个和第三个的作用是压缩 css 文件。