Skip to content

Commit 3e0cd3d

Browse files
authored
fix: import.meta.env and process.env undefined variable replacement (fix #8663) (#10958)
Co-authored-by: bluwy <[email protected]> fix #8663
1 parent ac2cfd6 commit 3e0cd3d

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ export function definePlugin(config: ResolvedConfig): Plugin {
8585
.join('|') +
8686
// Mustn't be followed by a char that can be part of an identifier
8787
// or an assignment (but allow equality operators)
88-
')(?![\\p{L}\\p{N}_$]|\\s*?=[^=])',
88+
')(?:(?<=\\.)|(?![\\p{L}\\p{N}_$]|\\s*?=[^=]))',
8989
'gu'
9090
)
9191
: null

playground/define/__tests__/define.spec.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { expect, test } from 'vitest'
22
import viteConfig from '../vite.config'
3-
import { page } from '~utils'
3+
import { isBuild, page } from '~utils'
44

55
test('string', async () => {
66
const defines = viteConfig.define
@@ -44,4 +44,10 @@ test('string', async () => {
4444
expect(await page.textContent('.define-in-dep')).toBe(
4545
defines.__STRINGIFIED_OBJ__
4646
)
47+
expect(await page.textContent('.import-meta-env-undefined')).toBe(
48+
isBuild ? '({}).UNDEFINED' : 'import.meta.env.UNDEFINED'
49+
)
50+
expect(await page.textContent('.process-env-undefined')).toBe(
51+
isBuild ? '({}).UNDEFINED' : 'process.env.UNDEFINED'
52+
)
4753
})
+5-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
module.exports = { defined: __STRINGIFIED_OBJ__ }
1+
module.exports = {
2+
defined: __STRINGIFIED_OBJ__,
3+
importMetaEnvUndefined: 'import.meta.env.UNDEFINED',
4+
processEnvUndefined: 'process.env.UNDEFINED'
5+
}

playground/define/index.html

+7-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ <h1>Define</h1>
1717
<p>define variable in html: <code class="exp-define">__EXP__</code></p>
1818
<p>import json: <code class="import-json"></code></p>
1919
<p>define in dep: <code class="define-in-dep"></code></p>
20+
<p>
21+
import.meta.env.UNDEFINED: <code class="import-meta-env-undefined"></code>
22+
</p>
23+
<p>process.env.UNDEFINED: <code class="process-env-undefined"></code></p>
2024

2125
<script type="module">
2226
const __VAR_NAME__ = true // ensure define doesn't replace var name
@@ -52,8 +56,10 @@ <h1>Define</h1>
5256
document.querySelector(el).textContent = text
5357
}
5458

55-
import { defined } from 'dep'
59+
import { defined, importMetaEnvUndefined, processEnvUndefined } from 'dep'
5660
text('.define-in-dep', JSON.stringify(defined))
61+
text('.import-meta-env-undefined', importMetaEnvUndefined)
62+
text('.process-env-undefined', processEnvUndefined)
5763
</script>
5864

5965
<style>

0 commit comments

Comments
 (0)