mirror of
				https://github.com/pure-admin/vue-pure-admin.git
				synced 2025-11-03 13:44:47 +08:00 
			
		
		
		
	fix: process.env.node_env undefined (#47)
自定义loadEnv函数,process.env.NODE_ENV=undefined,采用Vite loadEnv,并保留字段loadEnv
This commit is contained in:
		
							parent
							
								
									be4404dcdc
								
							
						
					
					
						commit
						e86757e30e
					
				@ -1,41 +1,32 @@
 | 
			
		||||
import * as dotenv from "dotenv";
 | 
			
		||||
 | 
			
		||||
export interface ViteEnv {
 | 
			
		||||
  VITE_PORT: number;
 | 
			
		||||
  VITE_OPEN: boolean;
 | 
			
		||||
  VITE_USE_MOCK: boolean;
 | 
			
		||||
  VITE_PUBLIC_PATH: string;
 | 
			
		||||
  VITE_PROXY: [string, string][];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function loadEnv(): ViteEnv {
 | 
			
		||||
  const env = process.env.NODE_ENV;
 | 
			
		||||
const warpperEnv = (envConf: Recordable): ViteEnv => {
 | 
			
		||||
  const ret: any = {};
 | 
			
		||||
  // eslint-disable-next-line no-sparse-arrays
 | 
			
		||||
  const envList = [`.env.${env}.local`, `.env.${env}`, ".env.local", ".env", ,];
 | 
			
		||||
  envList.forEach(e => {
 | 
			
		||||
    dotenv.config({
 | 
			
		||||
      path: e
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
  for (const envName of Object.keys(process.env)) {
 | 
			
		||||
    let realName = (process.env as any)[envName].replace(/\\n/g, "\n");
 | 
			
		||||
 | 
			
		||||
  for (const envName of Object.keys(envConf)) {
 | 
			
		||||
    let realName = envConf[envName].replace(/\\n/g, "\n");
 | 
			
		||||
    realName =
 | 
			
		||||
      realName === "true" ? true : realName === "false" ? false : realName;
 | 
			
		||||
 | 
			
		||||
    if (envName === "VITE_PORT") {
 | 
			
		||||
      realName = Number(realName);
 | 
			
		||||
    }
 | 
			
		||||
    if (envName === "VITE_OPEN") {
 | 
			
		||||
      realName = Boolean(realName);
 | 
			
		||||
    }
 | 
			
		||||
    if (envName === "VITE_PROXY") {
 | 
			
		||||
    if (envName === "VITE_PROXY" && realName) {
 | 
			
		||||
      try {
 | 
			
		||||
        realName = JSON.parse(realName);
 | 
			
		||||
        // eslint-disable-next-line no-empty
 | 
			
		||||
      } catch (error) {}
 | 
			
		||||
        realName = JSON.parse(realName.replace(/'/g, '"'));
 | 
			
		||||
      } catch (error) {
 | 
			
		||||
        realName = "";
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    ret[envName] = realName;
 | 
			
		||||
    process.env[envName] = realName;
 | 
			
		||||
    if (typeof realName === "string") {
 | 
			
		||||
      process.env[envName] = realName;
 | 
			
		||||
    } else if (typeof realName === "object") {
 | 
			
		||||
      process.env[envName] = JSON.stringify(realName);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
};
 | 
			
		||||
const loadEnv = (): ViteEnv => {
 | 
			
		||||
  return import.meta.env;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export { loadEnv, warpperEnv };
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								types/global.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								types/global.d.ts
									
									
									
									
										vendored
									
									
								
							@ -63,7 +63,7 @@ declare global {
 | 
			
		||||
    __: unknown;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  interface ViteEnv {
 | 
			
		||||
  declare interface ViteEnv {
 | 
			
		||||
    VITE_PORT: number;
 | 
			
		||||
    VITE_USE_MOCK: boolean;
 | 
			
		||||
    VITE_USE_PWA: boolean;
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,8 @@
 | 
			
		||||
import { resolve } from "path";
 | 
			
		||||
import { UserConfigExport, ConfigEnv } from "vite";
 | 
			
		||||
import { UserConfigExport, ConfigEnv, loadEnv } from "vite";
 | 
			
		||||
import vue from "@vitejs/plugin-vue";
 | 
			
		||||
import vueJsx from "@vitejs/plugin-vue-jsx";
 | 
			
		||||
import { loadEnv } from "./build/utils";
 | 
			
		||||
import { warpperEnv } from "./build/utils";
 | 
			
		||||
import { createProxy } from "./build/proxy";
 | 
			
		||||
import { viteMockServe } from "vite-plugin-mock";
 | 
			
		||||
import svgLoader from "vite-svg-loader";
 | 
			
		||||
@ -13,8 +13,6 @@ const pathResolve = (dir: string): any => {
 | 
			
		||||
  return resolve(__dirname, ".", dir);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const { VITE_PORT, VITE_PUBLIC_PATH, VITE_PROXY } = loadEnv();
 | 
			
		||||
 | 
			
		||||
const alias: Record<string, string> = {
 | 
			
		||||
  "/@": pathResolve("src"),
 | 
			
		||||
  //解决开发环境下的警告 You are running the esm-bundler build of vue-i18n. It is recommended to configure your bundler to explicitly replace feature flag globals with boolean literals to get proper tree-shaking in the final bundle.
 | 
			
		||||
@ -23,7 +21,10 @@ const alias: Record<string, string> = {
 | 
			
		||||
 | 
			
		||||
const root: string = process.cwd();
 | 
			
		||||
 | 
			
		||||
export default ({ command }: ConfigEnv): UserConfigExport => {
 | 
			
		||||
export default ({ command, mode }: ConfigEnv): UserConfigExport => {
 | 
			
		||||
  const { VITE_PORT, VITE_PUBLIC_PATH, VITE_PROXY } = warpperEnv(
 | 
			
		||||
    loadEnv(mode, root)
 | 
			
		||||
  );
 | 
			
		||||
  const prodMock = true;
 | 
			
		||||
  return {
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user