在我的应用程序中,假设我有两个 JS 页面 A 和 B,每个页面都导入不同的样式表 ( import '../style/<A or B.css>'
)。
两个样式表具有相同的类名,但具有不同的属性。
我跑 yarn run dev ==> dev: webpack-dev-server --inline --hot ==> webpack -p
这就是我的 html 的<head>
样子
https://imgur.com/a/1JVb5
页面 A 样式表先加载,然后页面 B css 样式加载
当我转到页面 B 时,css 是正确的
当我转到页面 A 时,css 被混淆,并且某些类样式被页面 B.css 覆盖。
我的项目结构就像
public/
bundle.js
index.html
src/
components/
pages/
style/
App.js
index.js
package.json
webpack.config.js
我的 webpack.config.js 是
const path = require('path');
var config = {
entry: path.resolve(__dirname, 'src', 'index.js'),
output: {
path: path.resolve(__dirname, 'public'),
filename: 'bundle.js'
},
devServer: {
contentBase: path.resolve(__dirname, 'src'),
publicPath: path.resolve(__dirname, 'public')
},
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: [
{ loader: 'babel-loader',
options: { presets: ['react','env'] } }
]
},
{
test: /\.css$/,
use: [
{ loader: "style-loader?singleton",
options:
{ singleton: true }
},
{ loader: "css-loader" }
]
}
]
}
};
module.exports = config;
我希望 Webpack 合并多个元素并修复 css 覆盖问题
在 Webpack 中,我已经尝试过style-loader?singleton
,{ singleton: true }
但没有奏效。
编辑 1:查看 extract-text-webpack-plugin
编辑2:
import movieStyle from '../style/MovieDetail.css'
...
return (
<div id="CellDetail_right" className={ movieStyle['cell-detail-right'] }>...</div>
)
好的,我添加了options: { modules: true }
它没有用。我的 className 被连字符连接,并且在编译浏览器后呈现没有任何样式或类的组件。浏览器上的 Div 看起来像<div id="CellDetail_right">...<div>
一种解决方案是启用局部范围的 css 以避免样式流血/覆盖。更新您的css-loader
选项以包括modules: true
{
test: /\.css$/,
use: [
{
loader: "style-loader",
options: { singleton: true }
},
{
loader: "css-loader",
options: {
modules: true,
camelCase: 'dashes',
localIdentName: '[path][name]__[local]'
}
}
]
}
然后,在您的组件中使用:
import styles from '../style/MovieDetail.css';
function MyComponent() {
return (
<div className={styles.container}>
<div className={styles.cellDetailRight}>Some Content</div>
</div>
);
}
这可确保尽管您.container
在其他 css 文件中定义了更多规则,但此特定规则变为类似._-path-to-component__container
.
使用camelCase: 'dashes'
in 选项转换您的连字符规则。
类名中的破折号将被骆驼化
您还可以查看我的webpack-demo项目,其中包含用于处理您的场景的配置。检查webpack 配置
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句