Skip to content

cjsModuleRunnerPlugin transforms cjs with require("some-package") incorrectly when "some-package" exports esm #904

@hi-ogawa

Description

@hi-ogawa

Related #903

It's likely what's happening is that there is cjs code

const _interop_require_default = require("@swc/helpers/_/_interop_require_default");

which cjsModuleRunnerPlugin transforms into:

const _interop_require_default = (await import("@swc/helpers/_/_interop_require_default")).default;

which then in turn vite import analysis resolves as esm:

const _interop_require_default = (await import(".../@swc/helpers/esm/_interop_require_default.js")).default;
// then eventually module runner transform changes:
// import -> __vite_ssr_dynamic_import__

Either we have to do:

  • if we know package (in this case @swc/helpers/...) has esm variant, then we should omit default when transforming from require to `import.
  • Or we somehow instruct Vite import analysis to resolve it to cjs version of package. (this doesn't sound possible)

  • Or we check during runtime checkIfItShouldPickDefaultOrNot(await import("...")) based on some heuristics.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions