Files
erp-frontend/node/getEnv.ts

73 lines
1.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import fs from "fs";
import path from "path";
import dotenv from "dotenv";
export type Recordable<T = any> = Record<string, T>;
export function isDevFn(mode: string): boolean {
return mode === "development";
}
export function isProdFn(mode: string): boolean {
return mode === "production";
}
/**
* 是否开启生成 package 报告
*/
export function isReportMode(): boolean {
return process.env.VITE_REPORT === "true";
}
/**
* 重新解析 .env 的内容,重新封装类型,比如 .env 定义了 truefalse默认为字符串类型需要转换为 boolean 类型
*/
export function wrapperEnv(envConf: Recordable): ImportMetaEnv {
const ret: any = {};
for (const envName of Object.keys(envConf)) {
let realName = envConf[envName].replace(/\\n/g, "\n");
// 将 true 和 false 字符串转换为布尔值
realName = realName === "true" ? true : realName === "false" ? false : realName;
// 指定变量名进行类型转换
if (envName === "VITE_PORT") realName = Number(realName);
ret[envName] = realName;
process.env[envName] = realName;
}
return ret;
}
/**
* 从环境变量文件里获取变量值
*
* @param match 前缀
* @param confFiles 文件列表
*/
export function getEnvConfig(match = "VITE_", confFiles = [".env", ".env.production", ".env.sit", ".env.uat"]) {
let envConfig = {};
confFiles.forEach(item => {
try {
const env = dotenv.parse(fs.readFileSync(path.resolve(process.cwd(), item)));
envConfig = { ...envConfig, ...env };
} catch (error) {
console.error(`Error in parsing ${item}`, error);
}
});
Object.keys(envConfig).forEach(key => {
const reg = new RegExp(`^(${match})`);
if (!reg.test(key)) {
Reflect.deleteProperty(envConfig, key);
}
});
return envConfig;
}
/**
* 获取项目根路径
*/
export function getRootPath(...dir: string[]) {
return path.resolve(process.cwd(), ...dir);
}