Допустим, в моем приложении есть две страницы 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, затем загружается стиль css страницы B.
Когда я перехожу на страницу 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: просмотр экстракта-текста-webpack-plugin
ИЗМЕНИТЬ 2:
import movieStyle from '../style/MovieDetail.css'
...
return (
<div id="CellDetail_right" className={ movieStyle['cell-detail-right'] }>...</div>
)
Хорошо, я добавил options: { modules: true }
, и это не сработало. Мои имена классов написаны через дефис, и после компиляции браузер отображает компоненты БЕЗ какого-либо стиля или классов. Div в браузере выглядит как <div id="CellDetail_right">...<div>
modules
значение true - person Carloluis   schedule 15.03.2018