-
-
Notifications
You must be signed in to change notification settings - Fork 27.2k
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.foomay includes character+andquerySelectorwill 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
carvinlo, lithammer, pstrh, mrudowski and Oleg2tor