11import { build , rspackOnlyTest } from '@e2e/helper' ;
22import { expect , test } from '@playwright/test' ;
33
4- test ( 'should define vars in production mode correctly' , async ( ) => {
4+ declare global {
5+ interface Window {
6+ [ key : string ] : unknown ;
7+ }
8+ }
9+
10+ test ( 'should define vars in production mode correctly' , async ( { page } ) => {
511 const rsbuild = await build ( {
612 cwd : __dirname ,
13+ page,
14+ rsbuildConfig : {
15+ mode : 'production' ,
16+ } ,
717 } ) ;
818
9- const file = await rsbuild . getIndexFile ( ) ;
10- expect ( file . content ) . toContain (
11- 'console.log("import.meta.env.MODE","production")' ,
19+ const { content } = await rsbuild . getIndexFile ( ) ;
20+
21+ // Replaced identifiers
22+ expect ( content ) . toContain ( '"[value] import.meta.env.MODE","production"' ) ;
23+ expect ( content ) . toContain ( '"[value] process.env.NODE_ENV","production"' ) ;
24+
25+ // runtime values
26+ expect (
27+ await page . evaluate ( ( ) => window [ 'import.meta.env.MODE === "development"' ] ) ,
28+ ) . toBe ( undefined ) ;
29+ expect (
30+ await page . evaluate (
31+ ( ) => window [ 'import.meta.env?.MODE === "development"' ] ,
32+ ) ,
33+ ) . toBe ( undefined ) ;
34+ expect (
35+ await page . evaluate ( ( ) => window [ 'import.meta.env.MODE === "production"' ] ) ,
36+ ) . toBe ( true ) ;
37+ expect (
38+ await page . evaluate ( ( ) => window [ 'import.meta.env?.MODE === "production"' ] ) ,
39+ ) . toBe ( true ) ;
40+ expect ( await page . evaluate ( ( ) => window [ 'import.meta.env.DEV' ] ) ) . toBe (
41+ undefined ,
1242 ) ;
13- expect ( file . content ) . toContain (
14- 'console.log("process.env.NODE_ENV","production")' ,
43+ expect ( await page . evaluate ( ( ) => window [ 'import.meta.env?.DEV' ] ) ) . toBe (
44+ undefined ,
1545 ) ;
16- expect ( file . content ) . not . toContain ( 'console.log("import.meta.env.DEV")' ) ;
17- expect ( file . content ) . toContain ( 'console.log("import.meta.env.PROD")' ) ;
46+ expect ( await page . evaluate ( ( ) => window [ 'import.meta.env.PROD' ] ) ) . toBe ( true ) ;
47+ expect ( await page . evaluate ( ( ) => window [ 'import.meta.env?.PROD' ] ) ) . toBe ( true ) ;
48+ expect ( await page . evaluate ( ( ) => window . destructedValues ) ) . toBe (
49+ 'MODE:production,DEV:false,PROD:true' ,
50+ ) ;
51+
52+ // dead code elimination
53+ expect ( content ) . not . toContain (
54+ '[condition] import.meta.env.MODE === "development"' ,
55+ ) ;
56+ expect ( content ) . not . toContain ( '[condition] import.meta.env.DEV' ) ;
57+
58+ await rsbuild . close ( ) ;
1859} ) ;
1960
20- test ( 'should define vars in development mode correctly' , async ( ) => {
61+ test ( 'should define vars in development mode correctly' , async ( { page } ) => {
2162 const rsbuild = await build ( {
2263 cwd : __dirname ,
64+ page,
2365 rsbuildConfig : {
2466 mode : 'development' ,
2567 } ,
2668 } ) ;
2769
28- const file = await rsbuild . getIndexFile ( ) ;
29- expect ( file . content ) . toContain (
30- 'console.log(\'import.meta.env.MODE\', "development");' ,
70+ const { content } = await rsbuild . getIndexFile ( ) ;
71+
72+ // Replaced identifiers
73+ expect ( content ) . toContain ( `'[value] import.meta.env.MODE', "development"` ) ;
74+ expect ( content ) . toContain ( `'[value] process.env.NODE_ENV', "development"` ) ;
75+
76+ // runtime values
77+ expect (
78+ await page . evaluate ( ( ) => window [ 'import.meta.env.MODE === "development"' ] ) ,
79+ ) . toBe ( true ) ;
80+ expect (
81+ await page . evaluate (
82+ ( ) => window [ 'import.meta.env?.MODE === "development"' ] ,
83+ ) ,
84+ ) . toBe ( true ) ;
85+ expect (
86+ await page . evaluate ( ( ) => window [ 'import.meta.env.MODE === "production"' ] ) ,
87+ ) . toBe ( undefined ) ;
88+ expect (
89+ await page . evaluate ( ( ) => window [ 'import.meta.env?.MODE === "production"' ] ) ,
90+ ) . toBe ( undefined ) ;
91+ expect ( await page . evaluate ( ( ) => window [ 'import.meta.env.DEV' ] ) ) . toBe ( true ) ;
92+ expect ( await page . evaluate ( ( ) => window [ 'import.meta.env?.DEV' ] ) ) . toBe ( true ) ;
93+ expect ( await page . evaluate ( ( ) => window [ 'import.meta.env.PROD' ] ) ) . toBe (
94+ undefined ,
95+ ) ;
96+ expect ( await page . evaluate ( ( ) => window [ 'import.meta.env?.PROD' ] ) ) . toBe (
97+ undefined ,
3198 ) ;
32- expect ( file . content ) . toContain (
33- 'console.log(\'process.env.NODE_ENV\', " development") ' ,
99+ expect ( await page . evaluate ( ( ) => window . destructedValues ) ) . toBe (
100+ 'MODE: development,DEV:true,PROD:false ' ,
34101 ) ;
35- expect ( file . content ) . toContain ( "console.log('import.meta.env.DEV');" ) ;
36- expect ( file . content ) . not . toContain ( "console.log('import.meta.env.PROD');" ) ;
102+
103+ await rsbuild . close ( ) ;
37104} ) ;
38105
39- test ( 'should define vars in none mode correctly' , async ( ) => {
106+ test ( 'should define vars in none mode correctly' , async ( { page } ) => {
40107 const rsbuild = await build ( {
41108 cwd : __dirname ,
109+ page,
42110 rsbuildConfig : {
43111 mode : 'none' ,
44112 } ,
45113 } ) ;
46114
47- const file = await rsbuild . getIndexFile ( ) ;
48- expect ( file . content ) . toContain (
49- 'console.log(\'import.meta.env.MODE\', "none");' ,
115+ const { content } = await rsbuild . getIndexFile ( ) ;
116+
117+ // Replaced identifiers
118+ expect ( content ) . toContain ( `'[value] import.meta.env.MODE', "none"` ) ;
119+ expect ( content ) . toContain (
120+ `'[value] process.env.NODE_ENV', process.env.NODE_ENV` ,
121+ ) ;
122+
123+ // runtime values
124+ expect (
125+ await page . evaluate ( ( ) => window [ 'import.meta.env.MODE === "development"' ] ) ,
126+ ) . toBe ( undefined ) ;
127+ expect (
128+ await page . evaluate (
129+ ( ) => window [ 'import.meta.env?.MODE === "development"' ] ,
130+ ) ,
131+ ) . toBe ( undefined ) ;
132+ expect (
133+ await page . evaluate ( ( ) => window [ 'import.meta.env.MODE === "production"' ] ) ,
134+ ) . toBe ( undefined ) ;
135+ expect (
136+ await page . evaluate ( ( ) => window [ 'import.meta.env?.MODE === "production"' ] ) ,
137+ ) . toBe ( undefined ) ;
138+ expect ( await page . evaluate ( ( ) => window [ 'import.meta.env.DEV' ] ) ) . toBe (
139+ undefined ,
140+ ) ;
141+ expect ( await page . evaluate ( ( ) => window [ 'import.meta.env?.DEV' ] ) ) . toBe (
142+ undefined ,
143+ ) ;
144+ expect ( await page . evaluate ( ( ) => window [ 'import.meta.env.PROD' ] ) ) . toBe (
145+ undefined ,
50146 ) ;
51- expect ( file . content ) . toContain (
52- "console.log('process.env.NODE_ENV', process.env.NODE_ENV)" ,
147+ expect ( await page . evaluate ( ( ) => window [ 'import.meta.env?.PROD' ] ) ) . toBe (
148+ undefined ,
53149 ) ;
54- expect ( file . content ) . not . toContain ( "console.log('import.meta.env.DEV');" ) ;
55- expect ( file . content ) . not . toContain ( "console.log('import.meta.env.PROD');" ) ;
150+ expect ( await page . evaluate ( ( ) => window . destructedValues ) ) . toBe (
151+ 'MODE:none,DEV:false,PROD:false' ,
152+ ) ;
153+
154+ await rsbuild . close ( ) ;
56155} ) ;
57156
58157rspackOnlyTest ( 'should allow to disable NODE_ENV injection' , async ( ) => {
59158 const rsbuild = await build ( {
60159 cwd : __dirname ,
61160 rsbuildConfig : {
161+ mode : 'production' ,
62162 tools : {
63163 rspack : {
64164 optimization : { nodeEnv : false } ,
@@ -67,8 +167,8 @@ rspackOnlyTest('should allow to disable NODE_ENV injection', async () => {
67167 } ,
68168 } ) ;
69169
70- const file = await rsbuild . getIndexFile ( ) ;
71- expect ( file . content ) . toContain (
72- 'console.log(" process.env.NODE_ENV",process.env.NODE_ENV) ' ,
170+ const { content } = await rsbuild . getIndexFile ( ) ;
171+ expect ( content ) . toContain (
172+ '[value] process.env.NODE_ENV",process.env.NODE_ENV' ,
73173 ) ;
74174} ) ;
0 commit comments