Skip to content

Commit fee7393

Browse files
committed
refactor(css): use default CSS modules localsConvention settings
BREAKING CHANGE: CSS modules now defaults to export class names as-is. To get camelCase exports like before, explictly set `css.modules.localsConvention` via config.
1 parent 2c914a5 commit fee7393

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

docs/guide/features.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,15 @@ import classes from './example.module.css'
123123
document.getElementById('foo').className = classes.red
124124
```
125125

126-
Note that the CSS modules `localsConvention` defaults to `camelCaseOnly` - i.e. a class named `.foo-bar` will be exposed as `classes.fooBar`. CSS modules behavior can be configured via the [`css.modules` option](/config/#css-modules).
126+
CSS modules behavior can be configured via the [`css.modules` option](/config/#css-modules).
127+
128+
If `css.modules.localsConvention` is set to enable camelCase locals (e.g. `localsConvention: 'camelCaseOnly'`), you can also use named imports:
129+
130+
```js
131+
// .apply-color -> applyColor
132+
import { applyColor } from './example.module.css'
133+
document.getElementById('foo').className = applyColor
134+
```
127135

128136
### CSS Pre-processors
129137

packages/playground/css/main.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ import less from './less.less'
88
text('.imported-less', less)
99

1010
import mod from './mod.module.css'
11-
document.querySelector('.modules').classList.add(mod.applyColor)
11+
document.querySelector('.modules').classList.add(mod['apply-color'])
1212
text('.modules-code', JSON.stringify(mod, null, 2))
1313

1414
import sassMod from './mod.module.scss'
15-
document.querySelector('.modules-sass').classList.add(sassMod.applyColor)
15+
document.querySelector('.modules-sass').classList.add(sassMod['apply-color'])
1616
text('.modules-sass-code', JSON.stringify(sassMod, null, 2))
1717

1818
import './dep.css'

packages/vite/src/node/plugins/css.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,14 @@ export interface CSSModulesOptions {
5959
| ((name: string, filename: string, css: string) => string)
6060
hashPrefix?: string
6161
/**
62-
* default: 'camelCaseOnly'
62+
* default: 'camelCase'
6363
*/
64-
localsConvention?: 'camelCase' | 'camelCaseOnly' | 'dashes' | 'dashesOnly'
64+
localsConvention?:
65+
| 'camelCase'
66+
| 'camelCaseOnly'
67+
| 'dashes'
68+
| 'dashesOnly'
69+
| null
6570
}
6671

6772
const cssLangs = `\\.(css|less|sass|scss|styl|stylus|postcss)($|\\?)`
@@ -560,7 +565,6 @@ async function compileCSS(
560565
if (isModule) {
561566
postcssPlugins.unshift(
562567
(await import('postcss-modules')).default({
563-
localsConvention: 'camelCaseOnly',
564568
...modulesOptions,
565569
getJSON(_: string, _modules: Record<string, string>) {
566570
modules = _modules

0 commit comments

Comments
 (0)