Open
Description
Describe the bug
Use getLocalIdent: getCSSModuleLocalIdent
in css-loader option may cause unexpected behavior when using moduled CSS class names in querySelector
.
Did you try recovering your dependencies?
Yes
Which terms did you search for in User Guide?
getCSSModuleLocalIdent
Environment
webpack
Steps to reproduce
(Write your steps here:)
- Use exactly the same webpack config in readme.
const getCSSModuleLocalIdent = require('react-dev-utils/getCSSModuleLocalIdent');
// In your webpack config:
// ...
module: {
rules: [
{
test: /\.module\.css$/,
use: [
require.resolve('style-loader'),
{
loader: require.resolve('css-loader'),
options: {
importLoaders: 1,
modules: {
getLocalIdent: getCSSModuleLocalIdent,
},
},
},
{
loader: require.resolve('postcss-loader'),
options: postCSSLoaderOptions,
},
],
},
];
}
- Write the following codes in app
import styles from '../someStyle.css'
document.querySelector('.' + styles.foo);
function Component() {
return <div className={styles.foo} />
}
- Hopes for the luck. In some rare cases,
styles.foo
may includes character+
andquerySelector
will throw error or return null.
Expected behavior
return value of getCSSModuleLocalIdent doesn't includes +
.
Actual behavior
return value of getCSSModuleLocalIdent may includes +
.
Reproducible demo
Checkout my forks tychenjiajun@28d10e6
In the test cases, if input class name is 'class1020', the output class name will be file_class1020__V+98r
. Using this class name inquerySelector
causes error, see https://codepen.io/chankcccc/pen/MWEmxpZ