Adding class to `styleName` and then adding class to CSS file does not work with HMR
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- javascript, react, sass, webpack
- Área
- build-system, frontend, tooling
Línea de trabajo
Comienza con la configuración de webpack proporcionada, especialmente con el ajuste HMR de react-css-modules y la cadena de loaders de SCSS. Reproduce la secuencia de añadir una clase styleName y después definirla en la hoja de estilos, y comprueba si el cambio en la hoja de estilos llega a la actualización del módulo. Se considera terminado cuando una edición que solo afecta a CSS actualiza la página en ejecución sin volver a guardar el archivo JavaScript.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I have this all setup and working and HMR will work except for in one use case. If you first add a class to styleName and then add the class to your css file HMR will not work. You need to go back to the JS file and re-save that file. This is the case no matter what handleMissingStyleName is set to. I have tried changing a number of settings in my Webpack config, but no luck. Any ideas are greatly appreciated. This is my Webpack config if that helps:
const path = require('path')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const CleanWebpackPlugin = require('clean-webpack-plugin')
const WriteFilePlugin = require('write-file-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin')
module.exports = (env, argv) => {
return {
context: path.resolve(__dirname, 'src'),
entry: './index.js',
output: {
path: path.resolve(__dirname, 'build'),
filename: 'module.min.js'
},
optimization: {
minimizer: [
new UglifyJsPlugin({
cache: true,
parallel: true,
sourceMap: false
}),
new OptimizeCSSAssetsPlugin({})
]
},
resolve: {
alias: {
react: 'preact-compat',
'react-dom': 'preact-compat',
'create-react-class': 'preact-compat/lib/create-react-class',
'react-dom-factories': 'preact-compat/lib/react-dom-factories'
}
},
module: {
rules: [
{
test: /\.scss$/,
use: [
argv.mode !== 'production'
? 'style-loader'
: MiniCssExtractPlugin.loader,
{
loader: 'css-loader',
options: {
sourceMap: argv.mode === 'production' ? false : true,
importLoader: 2,
modules: true,
localIdentName:
argv.mode !== 'production'
? '[local]-[hash:base64]'
: '[hash:base64]'
}
},
{
loader: 'resolve-url-loader'
},
{
loader: 'postcss-loader',
options: {
sourceMap: true,
plugins: [
require('autoprefixer')({
browsers: ['last 4 versions']
})
]
}
},
{
loader: 'sass-loader',
options: {
sourceMap: true,
data: '@import "variables"; @import "mixins";',
includePaths: [path.resolve(__dirname, './src/style')]
}
}
]
},
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
plugins: [
['@babel/plugin-proposal-decorators', { legacy: true }],
'@babel/plugin-proposal-class-properties',
['transform-react-jsx', { pragma: 'h' }],
[
'react-css-modules',
{
context: path.resolve(__dirname, 'src'),
webpackHotModuleReloading: true,
handleMissingStyleName: 'ignore',
generateScopedName:
argv.mode !== 'production'
? '[local]-[hash:base64]'
: '[hash:base64]',
filetypes: {
'.scss': {
syntax: 'postcss-scss'
}
}
}
]
]
}
}
},
{
test: /\.json$/,
use: 'json-loader'
},
{
test: /\.(xml|html|txt|md)$/,
use: 'raw-loader'
},
{
test: /\.(woff2?|ttf|eot|jpe?g|png|gif)(\?.*)?$/i,
use:
argv.mode === 'production'
? 'file-loader?name=[name].[ext]'
: 'url-loader'
},
{
test: /\.svg$/,
oneOf: [
{
include: [/css|non-inline-svg/],
use:
argv.mode === 'production'
? 'file-loader?name=[name].[ext]'
: 'url-loader'
},
{
exclude: [/css|non-inline-svg/],
loader: 'svg-inline-loader'
}
]
}
]
},
plugins: [
new CleanWebpackPlugin(['build/**']),
new HtmlWebpackPlugin({
template: './index.html',
minify: { collapseWhitespace: true }
}),
new HtmlWebpackPlugin({
template: './module.html',
filename: 'module.html',
inject: false,
minify: { collapseWhitespace: true }
}),
new WriteFilePlugin(),
new MiniCssExtractPlugin({
filename: 'module.min.css'
}),
new CopyWebpackPlugin([
{ from: './manifest.json', to: './' },
{ from: './favicon.ico', to: './' }
])
],
devServer: {
port: process.env.PORT || 8080,
host: 'localhost',
publicPath: '/',
contentBase: './src',
historyApiFallback: true,
open: true,
openPage: ''
}
}
}
- Lenguaje dominante
- JavaScript
- Estrellas
- 2k
- Forks
- 159
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de gajus/babel-plugin-react-css-modules
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
-
doesn't work with thread-loaderAbierto
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
gajus/babel-plugin-react-css-modules#309 · 1 reacción ·
-
doesn't work with windicssPosiblemente ocupada @lili21 la tomó hace 1774 días. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 20/100
gajus/babel-plugin-react-css-modules#306 · 1 comentario ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
gajus/babel-plugin-react-css-modules#304 · 7 comentarios · 1 reacción ·
Todos los issues de gajus/babel-plugin-react-css-modules
Issues similares
-
documentation v2
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
modelcontextprotocol/servers#5170 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
SwiftKickMobile/skai#84 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Billionmail/BillionMail#389 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
Uniswap/tokenlists-org#3331 ·
-
beginner-friendly category:finding-titles community enhancement first-timers-only good first issue hacktoberfest help wanted low hanging fruit micro-contribution type: task up-for-grabs
Dificultad 1/5 1-3 horas Aptitud para principiantes 85/100
Berserk-hub150/skillhawk#227 · 1 comentario ·
Los mantenedores suelen responder en 8 días