在Webpack中配置CSS Modules

如果你想要将样式局部化到单个组件,并且希望以某种方式“导入”它们作为对象(尽管实际上它们不是对象,而是被转换为具有唯一类名的 CSS),你可以使用 CSS Modules。CSS Modules 允许你编写普通的 CSS(或 Less,如果你配置了相应的 loader),但每个类名都会在构建时被转换为唯一的标识符。
要使用 CSS Modules,你需要确保你的构建系统(如 Webpack)已经配置了相应的 loader,并且你的 .less 文件被当作 CSS Modules 来处理。然后,你可以这样导入它们:

"css-loader": "^2.1.1",
rules: [  
      {  
        test: /\.css$/,  
        exclude: /node_modules/, // 排除node_modules目录  
        use: [  
          'style-loader', // 将CSS注入到DOM中  
          {  
            loader: 'css-loader',  
            options: {  
              modules: true, // 启用CSS Modules  
              localIdentName: '[name]__[local]--[hash:base64:5]', // 生成唯一标识符的格式  
              camelCase: true, // 将类名转换为驼峰命名法  
            }  
          }  
        ]  
      }  
      // 其他规则...  
    ]  

最新版本

 rules: [  
      {  
        test: /\.css$/,  
        exclude: /node_modules/,  
        use: [  
          'style-loader',  
          {  
            loader: 'css-loader',  
            options: {  
              modules: {  
                auto: true, // 启用 CSS Modules  
                getLocalIdent: (context, localIdentName, localName, options) => {  
                  // 这里可以自定义生成的类名格式  
                  // 例如,使用 [name]__[local]__[hash:base64:5] 的格式  
                  return `${localName}__${localIdentName.replace(/--/g, '_')}__${options.hashPrefix || ''}${options.contenthash.slice(0, options.hashDigestLength)}`;  
                },  
              },  
              // 如果需要,可以添加其他选项,比如 camelCase: true 来将类名转换为驼峰命名法  
              // 但请注意,camelCase 选项可能不再直接支持,因为类名通常是通过模板字符串或对象属性访问的,不需要转换  
            },  
          },  
        ],  
      },  
      // ... 其他规则 ...  
    ],