如何在Next.js中针对不同阶段设置Sentry“环境”?

问题描述 投票:0回答:1

我想将已弃用的 Next.js

publicRuntimeConfig
替换为多个阶段的现代 .env 文件,并为每个部署设置不同的
environment

问题是,

publicRuntimeConfig
在运行时评估 - 但 .envs 在构建时评估。

当我现在尝试在

sentry.client.config.js

中设置初始化选项时
Sentry.init({
  enabled: process.env.NODE_ENV === 'production',
  environment: process.env.ENVIRONMENT_NAME,
  dsn: SENTRY_DSN || NEXT_PUBLIC_SENTRY_DSN || SENTRY_DEFAULT_DSN,
  tracesSampleRate: SENTRY_TRACES_SAMPLE_RATE,
});

process.env.ENVIRONMENT_NAME
在构建时设置,而不是针对每个部署/阶段单独设置。 使用
process.env.NODE_ENV
不是一个选项,因为这样我的所有阶段和制作都将是相同的环境。

有没有办法区分我的 Sentry 数据中的部署/环境?

next.js environment-variables sentry
1个回答
0
投票

我找到了一个应该有效的解决方案(我并不完全满意):

由于它在客户端中运行,并且我的阶段是通过子域划分的,因此我检查

NODE_ENV
是否为
production
,然后检查
window.location.href
的子域。像这样的东西:

const findProdEnv = (href) => {
  const regex = /(?:http[s]*:\/\/)*(.*?)\.(?=[^/]*\..{2,5})/i;
  return href.match(regex)[1];
};

Sentry.init({
    enabled: process.env.NODE_ENV === 'production',
    environment:
    process.env.NODE_ENV !== 'production'
      ? process.env.NODE_ENV
      : findProdEnv(window.location.href),
});
© www.soinside.com 2019 - 2024. All rights reserved.