Cloudflare
操作指南
__name 问题

__name 问题

使用 OpenNext 适配器时,Wrangler 会使用 esbuild (opens in a new tab) 处理 worker 代码,并默认启用 keep-names (opens in a new tab) 选项。虽然这对调试通常很有帮助,但可能会与某些 Next.js 库(如 next-themes (opens in a new tab))产生冲突,这些库会将脚本转换为字符串。这是因为 esbuild 会在模块顶部引入 __name 函数,该函数可能会意外出现在生成的脚本字符串中。当这些字符串在运行时被求值时,__name 函数可能未被定义,从而导致开发者控制台中出现如下错误:

Uncaught ReferenceError: __name is not defined
💡

请注意,根据您的代码压缩设置,__name 标识符可能会被压缩,这会使得错误信息不够明确,在某些情况下可能不会直接显示 __name

如何解决此类问题

要解决此问题,您只需在 wrangler.jsonc 文件 (opens in a new tab)中将 keep_names 选项设置为 false,如下例所示:

{
  "$schema": "node_modules/wrangler/config-schema.json",
  "main": ".open-next/worker.js",
  "name": "my-app",
  "keep_names": false,
  /* ... */
}

这种解决方案的一个潜在缺点是,根据您的代码压缩设置,您可能会失去在调试工具中查看原始函数名称的能力。

💡
必须使用 Wrangler 版本 4.13.0 或更高版本才能使用此选项。