fix: process.env.node_env undefined (#47)

自定义loadEnv函数,process.env.NODE_ENV=undefined,采用Vite loadEnv,并保留字段loadEnv
This commit is contained in:
hb0730 2021-09-28 09:24:19 +08:00 committed by GitHub
parent be4404dcdc
commit e86757e30e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 36 deletions

View File

@ -1,41 +1,32 @@
import * as dotenv from "dotenv"; const warpperEnv = (envConf: Recordable): ViteEnv => {
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 ret: any = {}; const ret: any = {};
// eslint-disable-next-line no-sparse-arrays
const envList = [`.env.${env}.local`, `.env.${env}`, ".env.local", ".env", ,]; for (const envName of Object.keys(envConf)) {
envList.forEach(e => { let realName = envConf[envName].replace(/\\n/g, "\n");
dotenv.config({
path: e
});
});
for (const envName of Object.keys(process.env)) {
let realName = (process.env as any)[envName].replace(/\\n/g, "\n");
realName = realName =
realName === "true" ? true : realName === "false" ? false : realName; realName === "true" ? true : realName === "false" ? false : realName;
if (envName === "VITE_PORT") { if (envName === "VITE_PORT") {
realName = Number(realName); realName = Number(realName);
} }
if (envName === "VITE_OPEN") { if (envName === "VITE_PROXY" && realName) {
realName = Boolean(realName);
}
if (envName === "VITE_PROXY") {
try { try {
realName = JSON.parse(realName); realName = JSON.parse(realName.replace(/'/g, '"'));
// eslint-disable-next-line no-empty } catch (error) {
} catch (error) {} realName = "";
}
} }
ret[envName] = 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; return ret;
} };
const loadEnv = (): ViteEnv => {
return import.meta.env;
};
export { loadEnv, warpperEnv };

2
types/global.d.ts vendored
View File

@ -63,7 +63,7 @@ declare global {
__: unknown; __: unknown;
} }
interface ViteEnv { declare interface ViteEnv {
VITE_PORT: number; VITE_PORT: number;
VITE_USE_MOCK: boolean; VITE_USE_MOCK: boolean;
VITE_USE_PWA: boolean; VITE_USE_PWA: boolean;

View File

@ -1,8 +1,8 @@
import { resolve } from "path"; import { resolve } from "path";
import { UserConfigExport, ConfigEnv } from "vite"; import { UserConfigExport, ConfigEnv, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue"; import vue from "@vitejs/plugin-vue";
import vueJsx from "@vitejs/plugin-vue-jsx"; import vueJsx from "@vitejs/plugin-vue-jsx";
import { loadEnv } from "./build/utils"; import { warpperEnv } from "./build/utils";
import { createProxy } from "./build/proxy"; import { createProxy } from "./build/proxy";
import { viteMockServe } from "vite-plugin-mock"; import { viteMockServe } from "vite-plugin-mock";
import svgLoader from "vite-svg-loader"; import svgLoader from "vite-svg-loader";
@ -13,8 +13,6 @@ const pathResolve = (dir: string): any => {
return resolve(__dirname, ".", dir); return resolve(__dirname, ".", dir);
}; };
const { VITE_PORT, VITE_PUBLIC_PATH, VITE_PROXY } = loadEnv();
const alias: Record<string, string> = { const alias: Record<string, string> = {
"/@": pathResolve("src"), "/@": 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. //解决开发环境下的警告 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(); 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; const prodMock = true;
return { return {
/** /**