【问题标题】:Unacaught process is not defined even when used inside an if (process) {} block? [duplicate]即使在 if (process) {} 块中使用,也未定义未捕获的进程? [复制]
【发布时间】:2020-04-12 11:57:08
【问题描述】:

所以我试图根据来源在我的 Angular 应用程序中的 API 链接之间交换,但它是一个 SSR 应用程序,所以我试图考虑环境变量以及窗口位置,代码如下:

const getApiUrl = (): string => {
  if (process && process.env?.AZURE_ENV === 'development') {
    return 'devlink for SSR';
  } else if (
    window &&
    window.location.origin === 'devclient'
  ) {
    return 'devlink for frontendclient';
  } else {
    return 'link.com/';
  }
};

现在抛出的错误是:

Uncaught ReferenceError: process is not defined

我已经深入研究了“已编译”脚本,并 100% 确认它来自这段代码。

这不应该仍然有效吗?

我还尝试了一个只有 if(process) 并得到与上面完全相同的结果的版本。

【问题讨论】:

标签: javascript node.js


【解决方案1】:

可能它不存在因此无法评估,也许像typeof process !== 'undefined' 那样测试它会有所帮助

如果 process 从未在任何可访问的上下文中定义,我认为它将失败并出现 UncaughtReferenceError,因为它试图访问不在上下文中的内容。未定义意味着变量存在但它没有设置值,这个错误表示变量不存在,这就是为什么检查它的类型可能会解决问题。

【讨论】:

  • 但不应该因为未定义而处理虚假?似乎是一种奇怪的行为;尝试评估未在 if 块中定义的东西通常不是问题,这是让我感到奇怪的部分。我现在就试试“typeof”途径。
  • 如果进程从未在任何可访问的上下文中定义,我认为它会因 UncaughtReferenceError 而失败,因为它正在尝试访问不在上下文中的内容。未定义意味着该变量存在但没有设置值,并且此错误表示该变量不存在,这就是为什么检查它的类型可能会解决问题的原因。我现在无法测试它,因为我在电话中,但试一试
  • 这确实有效,并且学到了一些关于 JS 的新知识,谢谢!
【解决方案2】:

不。虽然对象的不存在字段实际上是 undefined,但对不存在变量的读取访问是 JavaScript 中的错误,请使用 typeof 作为其他答案的建议...

console.log("typeof {}.process",typeof {}.process);
console.log("typeof process",typeof process);
console.log("{}.process",{}.process);
console.log("process",process);

...另外,您的代码是 TypeScript,:string 部分将其泄露。这意味着它被编译为strict mode,甚至对不存在的非局部变量的写访问也会出错。

【讨论】:

    【解决方案3】:

    对于您的情况,如果您不想使用任何其他解决方案,请首先检查 global ,它类似于窗口但在节点上,因此进程将存储在 global.process 中

    【讨论】:

      【解决方案4】:

      我对角度不是很熟悉。但通常这应该是客户端代码,它无权访问节点环境变量。就算是SSR。

      如果您使用 webpack,您可以在客户端将环境变量定义为全局变量:

      https://webpack.js.org/plugins/define-plugin/

      【讨论】:

      • 这不是问题,因为我不需要它/期望它在那里。我遇到的问题不是评估 if (undefined variable) {}
      猜你喜欢
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      • 2017-03-30
      相关资源
      最近更新 更多