output.cssModules

  • Type:
type CssModules = {
  auto?: boolean | RegExp | ((resourcePath: string) => boolean);
  localIdentName?: string;
  exportLocalsConvention?: CssModuleLocalsConvention;
};

For custom CSS Modules configuration.

cssModules.auto

The auto configuration option allows CSS Modules to be automatically enabled based on their filenames.

  • Type: boolean | RegExp | ((resourcePath: string) => boolean)
  • Default: true

Type description:

  • true: enable CSS Modules for all files matching /\.module\.\w+$/i.test(filename) regexp.
  • false: disable CSS Modules.
  • RegExp: enable CSS Modules for all files matching /RegExp/i.test(filename) regexp.
  • function: enable CSS Modules for files based on the filename satisfying your filter function check.
export default {
  output: {
    cssModules: {
      auto: (resource) => {
        return resource.includes('.module.') || resource.includes('shared/');
      },
    },
  },
};

cssModules.exportLocalsConvention

Style of exported class names.

  • Type:
type CssModuleLocalsConvention =
  | 'asIs'
  | 'camelCase'
  | 'camelCaseOnly'
  | 'dashes'
  | 'dashesOnly';
  • Default: 'camelCase'

Type description:

  • asIs Class names will be exported as is.
  • camelCase Class names will be camelized, the original class name will not to be removed from the locals.
  • camelCaseOnly Class names will be camelized, the original class name will be removed from the locals.
  • dashes Only dashes in class names will be camelized.
  • dashesOnly Dashes in class names will be camelized, the original class name will be removed from the locals.
export default {
  output: {
    cssModules: {
      exportLocalsConvention: 'camelCaseOnly',
    },
  },
};

cssModules.localIdentName

  • Type: string
  • Default:
// isProd indicates that the production build
const localIdentName = isProd
  ? '[local]-[hash:base64:6]'
  : '[path][name]__[local]-[hash:base64:6]';

Sets the format of the className generated by CSS Modules after compilation.

Default Value

localIdentName has different default values in development and production.

In a production, Rsbuild will generate shorter class names to reduce the bundle size.

import styles from './index.module.scss';

// In development, the value is `.src-index-module__header-[hash]`
// In production, the value is `.header-[hash]`
console.log(styles.header);

Template String

You can use the following template strings in localIdentName:

  • [name] - the basename of the asset.
  • [local] - original class.
  • [hash] - the hash of the string.
  • [folder] - the folder relative path.
  • [path] - the relative path.
  • [file] - filename and path.
  • [ext] - extension with leading dot.
  • [hash:<hashDigest>:<hashDigestLength>]: hash with hash settings.

Example

Set localIdentName to other value:

export default {
  output: {
    cssModules: {
      localIdentName: '[hash:base64:4]',
    },
  },
};