webpack中像实现css Module的功能。
安装babel-plugin-react-css-modules后根据官方进行配置:插件的github
const config = WebpackMerge.merge(WebpackBase, {
module: {
rules: [
{
test: [/\.s[ac]ss$/i, /\.css$/i],
use: [
// "style-loader",
MiniCssExtractPlugin.loader,
{
loader: "css-loader",
options: {
importLoaders: 1,
modules: {
localIdentName: "[path][name]__[local]--[sha256:hash:base64:5]",
},
},
},
"sass-loader",
],
},
{
test: /\.(jsx|js)$/,
loader: "babel-loader",
options: {
cacheDirectory: true,
plugins: [
[
"react-css-modules",
{
context: path.join(__dirname, "../"),
exclude: "node_modules",
generateScopedName:
"[path][name]__[local]--[sha256:hash:base64:5]",
},
],
],
},
exclude: [path.join(__dirname, "../node_modules")],
},
],
},
});
由于生成的hash不一致。className无法对应到相应的样式。
这里应该如何配置才能使得 hash值相等
原因:
去搜索了下,应该是最新版的css-loader6.2.0使用了新的hash算法,所以导致两者的生成的hash不一致
解决:
在webpack.config.js中使用"generic-names": "^3.0.0", 生成类名,在babel.config.js中使用生成类名,也就是通过generic-names让两者达成一致。
webpack.config.js 配置如下:
babel.config.js 配置如下: