Skip to content

Commit 1fd9919

Browse files
authored
fix(optimizer): include exports for css modules (#13519)
1 parent 1999311 commit 1fd9919

File tree

5 files changed

+20
-5
lines changed

5 files changed

+20
-5
lines changed

packages/vite/src/node/optimizer/esbuildDepPlugin.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import path from 'node:path'
22
import type { ImportKind, Plugin } from 'esbuild'
3-
import { CSS_LANGS_RE, KNOWN_ASSET_TYPES } from '../constants'
3+
import { KNOWN_ASSET_TYPES } from '../constants'
44
import { getDepOptimizationConfig } from '..'
55
import type { PackageCache, ResolvedConfig } from '..'
66
import {
@@ -12,6 +12,7 @@ import {
1212
normalizePath,
1313
} from '../utils'
1414
import { browserExternalId, optionalPeerDepId } from '../plugins/resolve'
15+
import { isCSSRequest, isModuleCSSRequest } from '../plugins/css'
1516

1617
const externalWithConversionNamespace =
1718
'vite:dep-pre-bundle:external-conversion'
@@ -172,10 +173,11 @@ export function esbuildDepPlugin(
172173
// import itself with prefix (this is the actual part of require-import conversion)
173174
const modulePath = `"${convertedExternalPrefix}${args.path}"`
174175
return {
175-
contents: CSS_LANGS_RE.test(args.path)
176-
? `import ${modulePath};`
177-
: `export { default } from ${modulePath};` +
178-
`export * from ${modulePath};`,
176+
contents:
177+
isCSSRequest(args.path) && !isModuleCSSRequest(args.path)
178+
? `import ${modulePath};`
179+
: `export { default } from ${modulePath};` +
180+
`export * from ${modulePath};`,
179181
loader: 'js',
180182
}
181183
},

playground/optimize-deps/__tests__/optimize-deps.spec.ts

+1
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ test('pre bundle css require', async () => {
215215
}
216216

217217
expect(await getColor('.css-require')).toBe('red')
218+
expect(await getColor('.css-module-require')).toBe('red')
218219
})
219220

220221
test.runIf(isBuild)('no missing deps during build', async () => {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
const style = require('./mod.module.css')
2+
module.exports = style
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.cssModuleRequire {
2+
color: red;
3+
}

playground/optimize-deps/index.html

+7
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ <h2>Non Optimized Module isn't duplicated</h2>
9999
<h2>Pre bundle css require</h2>
100100
<div class="css-require">css require</div>
101101

102+
<h2>Pre bundle css modules require</h2>
103+
<div class="css-module-require">This should be red</div>
104+
102105
<script>
103106
function text(el, text) {
104107
document.querySelector(el).textContent = text
@@ -127,6 +130,10 @@ <h2>Pre bundle css require</h2>
127130

128131
import '@vitejs/test-dep-cjs-with-assets'
129132
import '@vitejs/test-dep-css-require'
133+
import cssModuleRequire from '@vitejs/test-dep-css-require/mod.cjs'
134+
document
135+
.querySelector('.css-module-require')
136+
.classList.add(cssModuleRequire.cssModuleRequire)
130137

131138
import { env } from '@vitejs/test-dep-node-env'
132139
text('.node-env', env)

0 commit comments

Comments
 (0)