Skip to content

Commit 71516db

Browse files
authoredJul 5, 2023
fix(define): stringify object parse error in build mode (#13600)
1 parent be4b0c0 commit 71516db

File tree

4 files changed

+16
-5
lines changed

4 files changed

+16
-5
lines changed
 

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export function definePlugin(config: ResolvedConfig): Plugin {
4141
if (isBuild) {
4242
const match = key.match(metaEnvRe)
4343
if (match) {
44-
userDefineEnv[match[1]] = `__vite__define__${userDefine[key]}`
44+
userDefineEnv[match[1]] = `__vite__define__${key}__define__vite__`
4545
}
4646
}
4747
}
@@ -62,8 +62,8 @@ export function definePlugin(config: ResolvedConfig): Plugin {
6262
SSR: '__vite__ssr__',
6363
...userDefineEnv,
6464
}).replace(
65-
/"__vite__define__(.+?)"([,}])/g,
66-
(_, val, suffix) => `${val.replace(/(^\\")|(\\"$)/g, '"')}${suffix}`,
65+
/"__vite__define__(.+?)__define__vite__"/g,
66+
(_, key) => userDefine[key],
6767
),
6868
})
6969
}

‎playground/env/__tests__/env.spec.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ test('define', async () => {
4141
expect(await page.textContent('.bool')).toBe('boolean')
4242
expect(await page.textContent('.number')).toBe('number')
4343
expect(await page.textContent('.string')).toBe('string')
44+
expect(await page.textContent('.stringify-object')).toBe('object')
4445
})
4546

4647
test('NODE_ENV', async () => {
@@ -82,7 +83,11 @@ test('env object', async () => {
8283
DEV: !isBuild,
8384
PROD: isBuild,
8485
VITE_NUMBER: 123,
85-
VITE_STRING: '123',
86+
VITE_STRING: '{"123",}',
87+
VITE_STRINGIFY_OBJECT: {
88+
a: '1',
89+
b: '2',
90+
},
8691
})
8792
})
8893

‎playground/env/index.html

+5
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ <h1>Environment Variables</h1>
1515
<p>typeof import.meta.env.VITE_BOOL: <code class="bool"></code></p>
1616
<p>typeof import.meta.env.VITE_NUMBER: <code class="number"></code></p>
1717
<p>typeof import.meta.env.VITE_STRING: <code class="string"></code></p>
18+
<p>
19+
typeof import.meta.env.VITE_STRINGIFY_OBJECT:
20+
<code class="stringify-object"></code>
21+
</p>
1822
<p>process.env.NODE_ENV: <code class="node-env"></code></p>
1923
<p>global.process.env.NODE_ENV: <code class="global-node-env"></code></p>
2024
<p>
@@ -38,6 +42,7 @@ <h1>Environment Variables</h1>
3842
text('.bool', typeof import.meta.env.VITE_BOOL)
3943
text('.number', typeof import.meta.env.VITE_NUMBER)
4044
text('.string', typeof import.meta.env.VITE_STRING)
45+
text('.stringify-object', typeof import.meta.env.VITE_STRINGIFY_OBJECT)
4146
text('.ssr', import.meta.env.SSR)
4247
text('.node-env', process.env.NODE_ENV)
4348
text('.global-node-env', global.process.env.NODE_ENV)

‎playground/env/vite.config.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export default defineConfig({
1111
define: {
1212
'import.meta.env.VITE_BOOL': true,
1313
'import.meta.env.VITE_NUMBER': '123',
14-
'import.meta.env.VITE_STRING': JSON.stringify('123'),
14+
'import.meta.env.VITE_STRING': JSON.stringify('{"123",}'),
15+
'import.meta.env.VITE_STRINGIFY_OBJECT': JSON.stringify({ a: '1', b: '2' }),
1516
},
1617
})

0 commit comments

Comments
 (0)
Please sign in to comment.