Skip to content

Commit 5aeadb7

Browse files
authored
fix: don't replace process.env if process not global variable (#3703)
1 parent dbb5eab commit 5aeadb7

File tree

4 files changed

+20
-2
lines changed

4 files changed

+20
-2
lines changed

packages/playground/define/__tests__/define.spec.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,7 @@ test('string', async () => {
1111
expect(await page.textContent('.env-var')).toBe(
1212
JSON.parse(defines['process.env.SOMEVAR'])
1313
)
14+
expect(await page.textContent('.process-as-property')).toBe(
15+
defines.__OBJ__.process.env.SOMEVAR
16+
)
1417
})

packages/playground/define/index.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ <h1>Define</h1>
66
<p>Boolean <code class="boolean"></code></p>
77
<p>Object <span class="pre object"></span></p>
88
<p>Env Var <code class="env-var"></code></p>
9+
<p>process as property: <code class="process-as-property"></code></p>
910

1011
<script type="module">
1112
text('.exp', __EXP__)
@@ -14,6 +15,7 @@ <h1>Define</h1>
1415
text('.boolean', __BOOLEAN__)
1516
text('.object', JSON.stringify(__OBJ__, null, 2))
1617
text('.env-var', process.env.SOMEVAR)
18+
text('.process-as-property', __OBJ__.process.env.SOMEVAR)
1719

1820
function text(el, text) {
1921
document.querySelector(el).textContent = text

packages/playground/define/vite.config.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ module.exports = {
88
foo: 1,
99
bar: {
1010
baz: 2
11+
},
12+
process: {
13+
env: {
14+
SOMEVAR: '"PROCESS MAY BE PROPERTY"'
15+
}
1116
}
1217
},
1318
'process.env.SOMEVAR': '"SOMEVAR"'

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,21 @@ export function definePlugin(config: ResolvedConfig): Plugin {
3232

3333
const replacements: Record<string, string | undefined> = {
3434
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || config.mode),
35+
'global.process.env.NODE_ENV': JSON.stringify(
36+
process.env.NODE_ENV || config.mode
37+
),
38+
'globalThis.process.env.NODE_ENV': JSON.stringify(
39+
process.env.NODE_ENV || config.mode
40+
),
3541
...userDefine,
3642
...importMetaKeys,
37-
'process.env.': `({}).`
43+
'process.env.': `({}).`,
44+
'global.process.env.': `({}).`,
45+
'globalThis.process.env.': `({}).`
3846
}
3947

4048
const pattern = new RegExp(
41-
'\\b(' +
49+
'(?<!\\.)\\b(' +
4250
Object.keys(replacements)
4351
.map((str) => {
4452
return str.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&')

0 commit comments

Comments
 (0)