如何让 Sentry 与已经存在的异步函数 nextConfig 一起工作?

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

所以我有这个 nextjs 项目,我正在尝试向它添加 Sentry,但是有一个问题,我在 next.config.js 中的 nextConfig 变量是一个异步函数,自 v12.0.10 以来,nextjs 本身将其接受为

module.export
,但哨兵没有。您需要将
module.export
包装到一个
withSentryConfig
中,它的第一个参数必须是 nextConfig 但如果它是异步函数,则此函数不接受 nextConfig。

我的 next.config.js 文件如下所示:

const { withSentryConfig } = require('@sentry/nextjs');

const prismic = require('@prismicio/client');

const sm = require('./sm.json');

/** @type {import('next').NextConfig} */
const nextConfig = async () => {
  const client = prismic.createClient(sm.apiEndpoint);

  const repository = await client.getRepository();
  const locales = repository.languages.map(lang => lang.id);

  return {
    reactStrictMode: true,
    swcMinify: true,
    compiler: {
      styledComponents: true,
    },
    i18n: {
      // These are all the locales you want to support in
      // your application
      locales: locales,
      // This is the default locale you want to be used when visiting
      // a non-locale prefixed path e.g. `/hello`
      defaultLocale: locales[0],
      localeDetection: false,
    },
  };
};

module.exports = withSentryConfig(
  nextConfig,
  { silent: true },
  { hideSourcemaps: true },
);

有解决方法吗?

“@sentry/nextjs”:“^7.42.0”

“下一个”:“13.1.2”

反应”:“18.2.0”

我试过尝试以多种方式导出它,比如将 await 放在 nextConfig 前面并调用它,使用 .then 块而不是 async await 但似乎没有任何效果。

module.exports = withSentryConfig(
  nextConfig(),
  { silent: true },
  { hideSourcemaps: true },
);
module.exports = withSentryConfig(
  await nextConfig(),
  { silent: true },
  { hideSourcemaps: true },
);

但他们似乎没有工作。如果我将 nextConfig 转换为一个对象,手动输入 locales 变量,它就可以工作,所以我知道异步函数是这里的问题。

asynchronous next.js async-await sentry
1个回答
0
投票

尝试创建一个名为

buildConfig
的异步函数,它返回一个用
withSentryConfig
包裹的对象。看下面...

const buildConfig = async () => {
  const client = prismic.createClient(sm.apiEndpoint);

  const repository = await client.getRepository();
  const locales = repository.languages.map(lang => lang.id);

  return withSentryConfig({
    reactStrictMode: true,
    swcMinify: true,
    compiler: {
      styledComponents: true,
    },
    i18n: {
      // These are all the locales you want to support in
      // your application
      locales: locales,
      // This is the default locale you want to be used when visiting
      // a non-locale prefixed path e.g. `/hello`
      defaultLocale: locales[0],
      localeDetection: false,
    },
  }, {silent: true}, {hideSourceMaps: true});
}

module.exports = buildConfig();
© www.soinside.com 2019 - 2024. All rights reserved.