我想将已弃用的 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 数据中的部署/环境?
我找到了一个应该有效的解决方案(我并不完全满意):
由于它在客户端中运行,并且我的阶段是通过子域划分的,因此我检查
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),
});