周旭
2021-07-08 7b76945bff004e969bf409de1b7fed594a119b6d
提交 | 用户 | age
2f6253 1 import fs from 'fs';
bb3b8f 2 import path from 'path';
2f6253 3 import dotenv from 'dotenv';
bb3b8f 4
99ac30 5 export function isDevFn(mode: string): boolean {
bd7b53 6   return mode === 'development';
2f6253 7 }
8
99ac30 9 export function isProdFn(mode: string): boolean {
bd7b53 10   return mode === 'production';
2f6253 11 }
12
2f1fbf 13 /**
V 14  * Whether to generate package preview
15  */
2f6253 16 export function isReportMode(): boolean {
17   return process.env.REPORT === 'true';
18 }
2f1fbf 19
V 20 // Read all environment variable configuration files to process.env
8a9ca4 21 export function wrapperEnv(envConf: Recordable): ViteEnv {
2f6253 22   const ret: any = {};
23
bd7b53 24   for (const envName of Object.keys(envConf)) {
V 25     let realName = envConf[envName].replace(/\\n/g, '\n');
e8aede 26     realName = realName === 'true' ? true : realName === 'false' ? false : realName;
8a9ca4 27
e8aede 28     if (envName === 'VITE_PORT') {
B 29       realName = Number(realName);
30     }
31     if (envName === 'VITE_PROXY') {
32       try {
33         realName = JSON.parse(realName);
34       } catch (error) {}
35     }
2f6253 36     ret[envName] = realName;
37     process.env[envName] = realName;
38   }
39   return ret;
40 }
bb3b8f 41
2f1fbf 42 /**
95c16a 43  * 获取当前环境下生效的配置文件名
44  */
45 function getConfFiles() {
46   const script = process.env.npm_lifecycle_script;
7b7694 47   const reg = new RegExp('--mode ([a-z]+)');
95c16a 48   const result = reg.exec(script as string) as any;
49   if (result) {
50     const mode = result[1] as string;
51     return ['.env', `.env.${mode}`];
52   }
53   return ['.env', '.env.production'];
54 }
55
56 /**
2f1fbf 57  * Get the environment variables starting with the specified prefix
V 58  * @param match prefix
59  * @param confFiles ext
60  */
95c16a 61 export function getEnvConfig(match = 'VITE_GLOB_', confFiles = getConfFiles()) {
bb3b8f 62   let envConfig = {};
N 63   confFiles.forEach((item) => {
64     try {
65       const env = dotenv.parse(fs.readFileSync(path.resolve(process.cwd(), item)));
66       envConfig = { ...envConfig, ...env };
95c16a 67     } catch (e) {
68       console.error(`Error in parsing ${item}`, e);
69     }
bb3b8f 70   });
95c16a 71   const reg = new RegExp(`^(${match})`);
bb3b8f 72   Object.keys(envConfig).forEach((key) => {
N 73     if (!reg.test(key)) {
74       Reflect.deleteProperty(envConfig, key);
75     }
76   });
77   return envConfig;
78 }
79
2f1fbf 80 /**
V 81  * Get user root directory
82  * @param dir file path
83  */
8a9ca4 84 export function getRootPath(...dir: string[]) {
bb3b8f 85   return path.resolve(process.cwd(), ...dir);
N 86 }