Vue Uncaught ReferenceError:进程未定义

leo*_*807 68 typescript webpack vue.js

我正在做一个Vue + typescript项目。我想用来process.env.var_name调整项目是处于开发模式还是生产模式,就像

const isProduct = process.env.APP_ENV === "prod";
Run Code Online (Sandbox Code Playgroud)

; 但是我在下面遇到了错误。我以前从未遇到过这个错误,所以有人可以告诉我为什么会发生这种情况,这样我就可以尝试找出项目中发生了什么,然后修复它。在此输入图像描述

小智 159

如果您正在使用Vite,请import.meta.env改为使用,process.env被删除。

并确保变量以VITE_in .envfile 开头。

VITE_SOME_KEY=123
Run Code Online (Sandbox Code Playgroud)

更多 https://vitejs.dev/guide/env-and-mode.html

  • 仅供参考,不建议存储秘密变量,“VITE_*”变量不应包含同一链接文档中所述的任何敏感信息。 (3认同)
  • 我使用的是 Vue 3 附带的 Vite,也遇到了同样的问题。正如您提到的,我使用 import.meta.env 而不是 process.env 并且它有效。 (2认同)

Iva*_*rra 12

我发现的解决方法是使用这样的 vite.config.js 文件

import { fileURLToPath, URL } from "node:url";
import { defineConfig, loadEnv } from "vite";
import vue from "@vitejs/plugin-vue";

// https://vitejs.dev/config/

export default ({ mode }) => {
  const env = loadEnv(mode, process.cwd(), "");
  return defineConfig({
    define: {
      "process.env": env,
    },
    plugins: [vue()],
    server: {
      host: true,
      port: 8080,
    },
    resolve: {
      alias: {
        "@": fileURLToPath(new URL("./src", import.meta.url)),
      },
    },
  });
};
Run Code Online (Sandbox Code Playgroud)

使用 vite 中的 loadEnv,然后定义“process.env”变量以指向 env。

  • 请注意,**这会将“process.env”的每个实例静态替换为_整个环境对象_**。 (2认同)

Kir*_*kov 8

你可以用if (import.meta.env.PROD) ...它代替。