File tree 4 files changed +27
-1
lines changed
packages/vite/src/node/plugins
4 files changed +27
-1
lines changed Original file line number Diff line number Diff line change @@ -963,11 +963,21 @@ export function htmlEnvHook(config: ResolvedConfig): IndexHtmlTransformHook {
963
963
const pattern = / % ( \S + ?) % / g
964
964
const envPrefix = resolveEnvPrefix ( { envPrefix : config . envPrefix } )
965
965
const env : Record < string , any > = { ...config . env }
966
+
966
967
// account for user env defines
967
968
for ( const key in config . define ) {
968
969
if ( key . startsWith ( `import.meta.env.` ) ) {
969
970
const val = config . define [ key ]
970
- env [ key . slice ( 16 ) ] = typeof val === 'string' ? val : JSON . stringify ( val )
971
+ if ( typeof val === 'string' ) {
972
+ try {
973
+ const parsed = JSON . parse ( val )
974
+ env [ key . slice ( 16 ) ] = typeof parsed === 'string' ? parsed : val
975
+ } catch {
976
+ env [ key . slice ( 16 ) ] = val
977
+ }
978
+ } else {
979
+ env [ key . slice ( 16 ) ] = JSON . stringify ( val )
980
+ }
971
981
}
972
982
}
973
983
return ( html , ctx ) => {
Original file line number Diff line number Diff line change @@ -294,6 +294,14 @@ describe('env', () => {
294
294
test ( 'env works' , async ( ) => {
295
295
expect ( await page . textContent ( '.env' ) ) . toBe ( 'bar' )
296
296
expect ( await page . textContent ( '.env-define' ) ) . toBe ( '5173' )
297
+ expect ( await page . textContent ( '.env-define-string' ) ) . toBe ( 'string' )
298
+ expect ( await page . textContent ( '.env-define-object-string' ) ) . toBe (
299
+ '{ "foo": "bar" }' ,
300
+ )
301
+ expect ( await page . textContent ( '.env-define-template-literal' ) ) . toBe (
302
+ '`template literal`' , // only double quotes will be unquoted
303
+ )
304
+ expect ( await page . textContent ( '.env-define-null-string' ) ) . toBe ( 'null' )
297
305
expect ( await page . textContent ( '.env-bar' ) ) . toBeTruthy ( )
298
306
expect ( await page . textContent ( '.env-prod' ) ) . toBe ( isBuild + '' )
299
307
expect ( await page . textContent ( '.env-dev' ) ) . toBe ( isServe + '' )
Original file line number Diff line number Diff line change 1
1
< p class ="env "> %VITE_FOO%</ p >
2
2
< p class ="env-define "> %VITE_NUMBER%</ p >
3
+ < p class ="env-define-string "> %VITE_STRING%</ p >
4
+ < p class ="env-define-object-string "> %VITE_OBJECT_STRING%</ p >
5
+ < p class ="env-define-template-literal "> %VITE_TEMPLATE_LITERAL%</ p >
6
+ < p class ="env-define-null-string "> %VITE_NULL_STRING%</ p >
3
7
< p class ="env-%VITE_FOO% "> class name should be env-bar</ p >
4
8
< p class ="env-prod "> %PROD%</ p >
5
9
< p class ="env-dev "> %DEV%</ p >
Original file line number Diff line number Diff line change @@ -36,6 +36,10 @@ export default defineConfig({
36
36
37
37
define : {
38
38
'import.meta.env.VITE_NUMBER' : 5173 ,
39
+ 'import.meta.env.VITE_STRING' : JSON . stringify ( 'string' ) ,
40
+ 'import.meta.env.VITE_OBJECT_STRING' : '{ "foo": "bar" }' ,
41
+ 'import.meta.env.VITE_TEMPLATE_LITERAL' : '`template literal`' ,
42
+ 'import.meta.env.VITE_NULL_STRING' : 'null' ,
39
43
} ,
40
44
41
45
plugins : [
You can’t perform that action at this time.
0 commit comments