@@ -9,7 +9,6 @@ import { isHTMLRequest } from './html'
99const nonJsRe = / \. j s o n (?: $ | \? ) /
1010const isNonJsRequest = ( request : string ) : boolean => nonJsRe . test ( request )
1111const importMetaEnvMarker = '__vite_import_meta_env__'
12- const bareImportMetaEnvRe = new RegExp ( `${ importMetaEnvMarker } (?!\\.)\\b` )
1312const importMetaEnvKeyRe = new RegExp ( `${ importMetaEnvMarker } \\..+?\\b` , 'g' )
1413
1514export function definePlugin ( config : ResolvedConfig ) : Plugin {
@@ -80,7 +79,6 @@ export function definePlugin(config: ResolvedConfig): Plugin {
8079 SSR : ssr + '' ,
8180 ...userDefineEnv ,
8281 } )
83- const banner = `const ${ importMetaEnvMarker } = ${ importMetaEnvVal } ;\n`
8482
8583 // Create regex pattern as a fast check before running esbuild
8684 const patternKeys = Object . keys ( userDefine )
@@ -94,7 +92,7 @@ export function definePlugin(config: ResolvedConfig): Plugin {
9492 ? new RegExp ( patternKeys . map ( escapeRegex ) . join ( '|' ) )
9593 : null
9694
97- return [ define , pattern , banner ] as const
95+ return [ define , pattern , importMetaEnvVal ] as const
9896 }
9997
10098 const defaultPattern = generatePattern ( false )
@@ -122,13 +120,23 @@ export function definePlugin(config: ResolvedConfig): Plugin {
122120 return
123121 }
124122
125- const [ define , pattern , banner ] = ssr ? ssrPattern : defaultPattern
123+ const [ define , pattern , importMetaEnvVal ] = ssr
124+ ? ssrPattern
125+ : defaultPattern
126126 if ( ! pattern ) return
127127
128128 // Check if our code needs any replacements before running esbuild
129129 pattern . lastIndex = 0
130130 if ( ! pattern . test ( code ) ) return
131131
132+ let marker = importMetaEnvMarker
133+ while ( new RegExp ( escapeRegex ( marker ) ) . test ( code ) ) {
134+ marker += '$'
135+ }
136+ if ( marker !== importMetaEnvMarker && 'import.meta.env' in define ) {
137+ define [ 'import.meta.env' ] = marker
138+ }
139+
132140 const result = await replaceDefine ( code , id , define , config )
133141
134142 // Replace `import.meta.env.*` with undefined
@@ -137,8 +145,8 @@ export function definePlugin(config: ResolvedConfig): Plugin {
137145 )
138146
139147 // If there's bare `import.meta.env` references, prepend the banner
140- if ( bareImportMetaEnvRe . test ( result . code ) ) {
141- result . code = banner + result . code
148+ if ( new RegExp ( escapeRegex ( marker ) ) . test ( result . code ) ) {
149+ result . code = `const ${ marker } = ${ importMetaEnvVal } ;\n` + result . code
142150
143151 if ( result . map ) {
144152 const map = JSON . parse ( result . map )
0 commit comments