Skip to content

module runner transform doesn't preserve default export value identify #9645

@hi-ogawa

Description

@hi-ogawa

Input: importee.js

export default {}

Output (Vite)

__vite_ssr_exports__.default = {}

Output (Oxc)

Object.defineProperty(__vite_ssr_exports__, "default", {
	enumerable: true,
	configurable: true,
	get() {
		return {};
	}
});

This transform causes distinct objects to be returned for each default import variable access since import side is transformed in this way:

Input: importer.js

import test from "./importee.js"
test === test;

Ouptut:

const __vite_ssr_import_0__ = await __vi_import_0__('/xxx/importee.js')
__vite_ssr_import_0__.default === __vite_ssr_import_0__.default; // should be true, but false

The issue is discovered when testing on rolldown-vite on vitest vitest-dev/vitest#7646.

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory - Bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions