javascript - 在函数中使用时为 "process is not defined"(Vue/Quasar)

标签 javascript vue.js quasar-framework

以下代码片段代表我的 Vue 3/Quasar 2 应用程序中的 Pinia 商店。此存储使用环境变量 VUE_APP_BACKEND_API_URL,该变量应从 window 对象或 process.env 读取。

但是我不明白为什么第一个变体是 wokring 而第二个变体不是。使用 getEnv 函数总是会导致 Uncaught (in Promise) ReferenceError: process is not Defined 错误。

import { defineStore } from 'pinia';

function getEnv(name) {
  return window?.appConfig?.[name] || process.env[name];
}

// 1. this is working
const backendApiUrl = window?.appConfig?.VUE_APP_BACKEND_API_URL || process.env.VUE_APP_BACKEND_API_URL;

// 2. this is NOT working
const backendApiUrl = getEnv('VUE_APP_BACKEND_API_URL');

export const useAppConfigStore = defineStore('appConfig', {
  state: () => ({
    authorizationUrl: new URL(
      '/oauth2/authorization/keycloak',
      backendApiUrl,
    ).toString(),
    logoutUrl: new URL('/logout', backendApiUrl).toString(),
    backendApiUrl: new URL(backendApiUrl).toString(),
  }),
});

最佳答案

特定于 NodeJS 的内容,例如 process不存在于浏览器环境中。 Webpack 和 Vite 实现都是通过替换 process.env.XYZ 来实现的表达式及其在构建时间上的值。所以,就process.env ,或process.env[name]不会被替换,这将导致您遇到的错误。请参阅caveats部分以及相关的 Webpack/Vite 文档和资源。因此,不幸的是,唯一简单的方法似乎是您尝试过的第一个漫长且重复的方法( const backendApiUrl = window?.appConfig?.VUE_APP_BACKEND_API_URL || process.env.VUE_APP_BACKEND_API_URL; )。您可以尝试将此逻辑嵌入到单个对象中,然后使用该函数来访问它。

const config = {
  VUE_APP_BACKEND_API_URL: window?.appConfig?.VUE_APP_BACKEND_API_URL || process.env.VUE_APP_BACKEND_API_URL
}

export function getEnv(name) {
  return config[name];
}

这样第一次定义它会更长、更重复,但至少你将能够通过代码库轻松使用它。

关于javascript - 在函数中使用时为 "process is not defined"(Vue/Quasar),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72169073/

相关文章:

javascript - 在 javascript 函数执行过程中同步样式更改

javascript - 使用 swr 时可以只获取一次数据吗?

javascript - 查找并替换数组中的匹配对象 - JavaScript

javascript - 在 Vue 中,将多个按钮之一更改为单击时处于事件状态

javascript - 拉拉维尔 5 : Get the default value of my select option with onChange event using Vue js

java - OSNotificationPayload 无法转换为 JSONObject

javascript - 让 WebStorm 识别 jest.setupFilesAfterEnv 中定义的方法

javascript - Vue项目导入js文件报错

vue.js - 如何在 Play 商店中通过我的 PWA 货币化(使用 TWA)

css - Quasar 框架 Flex 类