diff --git a/src/plugins/bundled-runtime-deps-jiti-aliases.test.ts b/src/plugins/bundled-runtime-deps-jiti-aliases.test.ts index 5e1ef201c39..3c7d5d3018c 100644 --- a/src/plugins/bundled-runtime-deps-jiti-aliases.test.ts +++ b/src/plugins/bundled-runtime-deps-jiti-aliases.test.ts @@ -55,7 +55,7 @@ describe("bundled runtime dependency Jiti aliases", () => { "./feature": "./features/feature.js", }, }); - writeFile(path.join(plainRoot, "esm/index.js")); + writeFile(path.join(plainRoot, "cjs/index.js")); writeFile(path.join(plainRoot, "features/feature.js")); const wildRoot = packageRoot(rootDir, "wild"); @@ -80,7 +80,34 @@ describe("bundled runtime dependency Jiti aliases", () => { "plain/feature": path.join(plainRoot, "features/feature.js"), "@scope/pkg": path.join(scopedRoot, "index.mjs"), "wild/sub/a": path.join(wildRoot, "dist/a.js"), - plain: path.join(plainRoot, "esm/index.js"), + plain: path.join(plainRoot, "cjs/index.js"), + }); + }); + + it("prefers require-compatible conditional exports for CommonJS-only runtime deps", () => { + const rootDir = makeTempRoot(); + writeJson(path.join(rootDir, "package.json"), { + dependencies: { + ws: "8.20.0", + }, + }); + const wsRoot = packageRoot(rootDir, "ws"); + writeJson(path.join(wsRoot, "package.json"), { + exports: { + ".": { + browser: "./browser.js", + import: "./wrapper.mjs", + require: "./index.js", + }, + }, + }); + writeFile(path.join(wsRoot, "wrapper.mjs")); + writeFile(path.join(wsRoot, "index.js")); + + registerBundledRuntimeDependencyJitiAliases(rootDir); + + expect(resolveBundledRuntimeDependencyJitiAliasMap()).toEqual({ + ws: path.join(wsRoot, "index.js"), }); }); diff --git a/src/plugins/bundled-runtime-deps-jiti-aliases.ts b/src/plugins/bundled-runtime-deps-jiti-aliases.ts index 17d567145b1..b39880527c0 100644 --- a/src/plugins/bundled-runtime-deps-jiti-aliases.ts +++ b/src/plugins/bundled-runtime-deps-jiti-aliases.ts @@ -52,7 +52,7 @@ function resolveRuntimePackageImportTarget(exportsField: unknown): string | null if (Object.prototype.hasOwnProperty.call(record, ".")) { return resolveRuntimePackageImportTarget(record["."]); } - for (const condition of ["import", "node", "default"] as const) { + for (const condition of ["require", "node", "default", "import"] as const) { const resolved = resolveRuntimePackageImportTarget(record[condition]); if (resolved) { return resolved;