utils.ts 2.3 KB

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