Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

@sentry/cloudflare/vite: Auto-instrumentation skips the Worker when wrangler `main` is a package specifier

Đang mở
#24,522 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
58/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
typescript, vite
Lĩnh vực
backend, build-system

Hướng nghiên cứu

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.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Cloudflare Workers Feature
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/cloudflare@11.0.0-rc.0, @cloudflare/vite-plugin@1.56.0, wrangler@4.135.0, vinext@1.0.0-beta.10 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:

  1. It reads the config with unstable_readConfig(..., { preserveOriginalMain: true }).
  2. maybeResolveMain() makes main absolute only when it ends with a JS or TS extension.
  3. 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 main with this.resolve() (for example in buildStart, or lazily in transform), and compare the resolved module ID.
  • When the resolved entry is in node_modules, look for instrument.server.* in the Wrangler config directory (the Vite root) and not next to the entry.
  • Log a warning when main does not resolve to a module that the plugin transforms, so the failure is not silent.
  • Add a test fixture where main is a package specifier.
Ngôn ngữ chính
TypeScript
Star
8.7k
Fork
1.9k
Merge trung bình
1 ngày 18 giờ
Pull request đã merge (30 ngày)
562

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của getsentry/sentry-javascript

Tất cả issue của getsentry/sentry-javascript

Issue tương tự

Thêm issue về TypeScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.