@@ -6,6 +6,7 @@ import { isCSSRequest } from './css'
6
6
import { isHTMLRequest } from './html'
7
7
8
8
const nonJsRe = / \. j s o n (?: $ | \? ) /
9
+ const metaEnvRe = / i m p o r t \. m e t a \. e n v \. ( .+ ) /
9
10
const isNonJsRequest = ( request : string ) : boolean => nonJsRe . test ( request )
10
11
11
12
export function definePlugin ( config : ResolvedConfig ) : Plugin {
@@ -30,29 +31,34 @@ export function definePlugin(config: ResolvedConfig): Plugin {
30
31
} )
31
32
}
32
33
34
+ const env = { ...config . env }
33
35
const userDefine : Record < string , string > = { }
34
36
for ( const key in config . define ) {
35
37
const val = config . define [ key ]
36
38
userDefine [ key ] = typeof val === 'string' ? val : JSON . stringify ( val )
39
+
40
+ // make sure `import.meta.env` object has user define properties
41
+ const match = key . match ( metaEnvRe )
42
+ if ( match ) {
43
+ env [ match [ 1 ] ] = val
44
+ }
37
45
}
38
46
39
47
// during dev, import.meta properties are handled by importAnalysis plugin.
40
48
// ignore replace import.meta.env in lib build
41
49
const importMetaKeys : Record < string , string > = { }
42
50
const importMetaFallbackKeys : Record < string , string > = { }
43
51
if ( isBuild ) {
44
- const env : Record < string , any > = {
45
- ...config . env ,
46
- SSR : ! ! config . build . ssr ,
47
- }
52
+ env . SSR = ! ! config . build . ssr
53
+
48
54
// set here to allow override with config.define
49
55
importMetaKeys [ 'import.meta.hot' ] = `undefined`
50
56
for ( const key in env ) {
51
57
importMetaKeys [ `import.meta.env.${ key } ` ] = JSON . stringify ( env [ key ] )
52
58
}
53
59
Object . assign ( importMetaFallbackKeys , {
54
60
'import.meta.env.' : `({}).` ,
55
- 'import.meta.env' : JSON . stringify ( config . env ) ,
61
+ 'import.meta.env' : JSON . stringify ( env ) ,
56
62
} )
57
63
}
58
64
0 commit comments