【发布时间】:2018-11-24 08:35:16
【问题描述】:
我第一次尝试使用 React 和 Webpack 的 CSS 模块,我遇到了至少三种方法来实现它:
我选择了babel-plugin-react-css-modules,以平衡代码的简单性和性能,并且一切似乎都运行良好,除了一件事:我的第 3 方库(Bootstrap 和 Font Awesome)也包含在 CSS 模块转换中。
<NavLink to="/about" styleName="navigation-button"></NavLink>
上面将正确转换的className 分配给NavLink。但是,内部的span 需要引用全局样式才能呈现图标。
<span className="fa fa-info" />
上面的 span 没有分配预期的转换后的 className,但是我的捆绑样式表没有这些 CSS 类,因为它们正在被转换成其他东西,以模拟本地范围。
下面是我的.babelrc文件中激活babel-plugin-react-css-modules的内容:
{
"presets": ["env", "react"],
"plugins": [
["react-css-modules", {
"generateScopedName": "[name]__[local]___[hash:base64:5]",
"filetypes": {
".less": {
"syntax": "postcss-less"
}
}
}]
]
}
在我的 Webpack 配置中,下面是为转换配置 css-loader 的部分:
{
test: /\.(less|css)$/,
exclude: /node_modules/,
use: extractCSS.extract({
fallback: 'style-loader',
use: [
{
loader: 'css-loader',
options: {
minimize: true,
modules: true,
sourceMap: true,
localIdentName: '[name]__[local]___[hash:base64:5]'
}
},
{
loader: 'less-loader'
}
]
})
}
据我所知,上述规则应该排除库样式表,我还尝试专门为排除的样式表添加另一条规则,但这似乎不起作用,因为我猜这些样式表仍然使用原始规则。
为了从这两个库中导入 CSS,我的父样式表中有以下两行声明了一些全局样式:
@import '../../../node_modules/bootstrap/dist/css/bootstrap.min.css';
@import '../../../node_modules/font-awesome/css/font-awesome.min.css';
【问题讨论】:
标签: reactjs webpack css-modules babel-plugin-react-css-modules