我第一次尝试CSS模块和React,Webpack和我找到了至少三种方法来实现它:
为了平衡代码的简单性和性能,我使用了babel-plugin-react-css-modules,除了一件事之外,一切看起来都很好:我的第三方库(Bootstrap和Font )也包含在code转换中。
<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';发布于 2018-12-14 14:05:55
我发现以下两种方法可能会有帮助:
简而言之,到目前为止,似乎没有任何选项可以忽略/排除css模块webpack插件模块化的某些路径。理想情况下,插件应该支持它,但以下是一些您可以尝试的方法:
使用两种webpack规则来利用webpack规则排除/包含
module.exports = {
rules: [
{
test: /\.css$/,
exclude: /node_modules/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: true,
localIdentName: '[path]__[local]___[hash:base64:5]',
},
},
],
},
{
test: /\.css$/,
include: /node_modules/,
use: ['style-loader', 'css-loader']
}
]
}...or,从上面的第二个答案中注入webpack的getLocalIdent,手动排除某些路径。
const getLocalIdent = require('css-loader/lib/getLocalIdent');
{
loader: 'css-loader',
options: {
modules: true,
localIdentName: '[path][name]__[local]--[hash:base64:5]',
getLocalIdent: (loaderContext, localIdentName, localName, options) => {
return loaderContext.resourcePath.includes('semantic-ui-css') ?
localName :
getLocalIdent(loaderContext, localIdentName, localName, options);
}
}
}发布于 2020-10-30 15:56:04
对我来说,使用:global起了作用:
.my-component {
:global {
.external-ui-component {
padding: 16px;
// Some other styling adjustments here
}
...
}
}Ps:对于webpack的配置,请看另一个答案。
发布于 2021-02-07 21:55:03
来自playing771的更新解决方案
{
loader: 'css-loader',
options: {
modules: {
auto: (resourcePath) => !resourcePath.includes('node_modules'),
localIdentName: '[name]__[local]__[hash:base64:5]',
},
},
},https://stackoverflow.com/questions/50859629
复制相似问题