@sentry/cloudflare/vite: Auto-instrumentation skips the Worker when wrangler `main` is a package specifier
维护者通常 1 天内回复
@ihsraham 已经在做这个了。
开始于 2026年9月28日。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 58/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- typescript, vite
- 领域
- backend, build-system
调研方向
Start with packages/cloudflare/src/vite/wranglerConfig.ts, autoInstrument.ts, and instrumentFile.ts, then inspect the existing Cloudflare Vite test fixtures. Trace how Wrangler's main value is resolved and compared with transformed module IDs. Done means package-specifier entries are instrumented, node_modules entries find the project instrument file, unmatched entries produce a warning, and a package-specifier fixture passes.
由索引模型根据 Issue 内容生成。
描述
Description
sentryCloudflareVitePlugin() does not wrap the Worker when main in the Wrangler config is a package specifier and not a file path. The build succeeds, but the bundle contains no Sentry code, and the plugin logs no warning.
@cloudflare/vite-plugin supports this config, and vinext generates it by default with vinext init --platform=cloudflare:
// wrangler.jsonc
{
"main": "vinext/server/fetch-handler",
// ...
}
// vite.config.ts
export default defineConfig({
plugins: [
vinext(),
cloudflare({ viteEnvironment: { name: "rsc", childEnvironments: ["ssr"] } }),
sentryCloudflareVitePlugin(),
],
});
Tested with @sentry/[email protected], @cloudflare/[email protected], [email protected], [email protected] and Vite 8.3.
Cause
resolveWranglerConfig() calls unstable_readConfig() without preserveOriginalMain (wranglerConfig.ts#L70). Wrangler then resolves every main as a path relative to the config file:
main: "vinext/server/fetch-handler"
-> <project>/vinext/server/fetch-handler (file does not exist)
autoInstrument.ts compares this path with the module IDs in transform (L75), so no module matches. resolveInstrumentFile() also looks for instrument.server.* in the directory of this path (instrumentFile.ts#L23), and a package entry has no such file.
@cloudflare/vite-plugin handles the same value differently:
- It reads the config with
unstable_readConfig(..., { preserveOriginalMain: true }). maybeResolveMain()makesmainabsolute only when it ends with a JS or TS extension.- It resolves the entry with Vite:
await this.resolve(workerConfig.main).
Workaround
Add a local entry that re-exports the package entry, and set main to it. Put instrument.server.ts in the same directory:
// worker/index.ts
import handler from "vinext/server/fetch-handler";
export default handler;
{ "main": "./worker/index.ts" }
Proposed fix
- Read the config with
preserveOriginalMain: true, and keep a package specifier unchanged. - Resolve
mainwiththis.resolve()(for example inbuildStart, or lazily intransform), and compare the resolved module ID. - When the resolved entry is in
node_modules, look forinstrument.server.*in the Wrangler config directory (the Vite root) and not next to the entry. - Log a warning when
maindoes not resolve to a module that the plugin transforms, so the failure is not silent. - Add a test fixture where
mainis a package specifier.
- 主要语言
- TypeScript
- 星标
- 8.8k
- 派生
- 1.9k
- 平均合并
- 2 天 46 分钟
- 30 天内合并 PR
- 535
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
getsentry/sentry-javascript 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 80/100
getsentry/sentry-javascript#24860 · 1 条评论 ·
维护者通常 1 天内回复
-
javascript
难度 2/5 1-3 小时 新手友好度 75/100
getsentry/sentry-javascript#24200 · 2 条评论 ·
维护者通常 1 天内回复
-
Cloudflare Workers javascript Tests
难度 2/5 1-3 小时 新手友好度 78/100
getsentry/sentry-javascript#24051 · 1 条评论 ·
维护者通常 1 天内回复
-
Elysia events report as `sentry.javascript.bun`可能已有人在做 @Shubham-Padkonde 于 18 天前认领。 未关闭Bug Bun javascript
难度 2/5 1-3 小时 新手友好度 92/100
getsentry/sentry-javascript#24045 · 1 条评论 ·
维护者通常 1 天内回复
-
javascript
难度 2/5 1-3 小时 新手友好度 75/100
getsentry/sentry-javascript#24043 · 1 条评论 ·
维护者通常 1 天内回复
查看 getsentry/sentry-javascript 的全部 Issue
相似的 Issue
-
refactor
难度 2/5 1-3 小时 新手友好度 76/100
tomnewport/memprot-topo#55 ·
-
难度 2/5 1-3 小时 新手友好度 72/100
WalletConnect/walletconnect-monorepo#7368 · 1 条评论 ·
维护者通常 1 天内回复
-
enhancement
难度 2/5 1-3 小时 新手友好度 72/100
BU-Spark/se-chem-apll#47 ·
-
documentation
难度 2/5 1 小时以内 新手友好度 82/100
维护者通常 1 天内回复
-
难度 2/5 半天 新手友好度 70/100
udistrital/paginaweb_root#23 ·