interop-test

ESM-CJS interop test

This project is maintained by JSerFeng

Direct differences

For readablility some shortcuts are applied:

import * as x and import() are excluded from these tables as they are too different.

Rspack <-> Webpack (.mjs)

rspack-webpack fixture rspack webpack
import * as x; x === await import() default-export-esModule-esm-reexport

default-export-esm

named-and-default-export-esModule-esm-reexport

named-and-default-export-esm

named-and-default-export-esm-esm-reexport

named-and-default-export-esm-reexport

named-export-esm

order-esm
false true

Webpack <-> Node.js (.mjs)

When using .mjs Webpack tries to be compatible to Node.js.

webpack-node fixture webpack node
import x

import { default as x }
default-export-esModule-esm-reexport

named-and-default-export-esModule-esm-reexport

named-and-default-export-esm-esm-reexport

named-and-default-export-esm-reexport

named-export-esm

order-esm

single-string-export-esm-reexport

tla-esm-esm-reexport
undefined + errors syntax error
import x

import { default as x }

import { named as x }

import { __esModule as x }
tla-esModule

tla-esModule-esm-reexport
compilation error syntax error
import * as x; x.default default-export-esModule-esm-reexport

named-and-default-export-esModule-esm-reexport

named-and-default-export-esm-esm-reexport

named-and-default-export-esm-reexport

named-export-esm

order-esm

single-string-export-esm-reexport

tla-esm-esm-reexport
undefined + errors undefined
import * as x; x.default

import * as x; ident(x).default

import * as x; x.named

import * as x; ident(x).named

import * as x; x.__esModule

import * as x; ident(x).__esModule

await import() === require()

import * as x; x === await import()
tla-esModule

tla-esModule-esm-reexport
compilation error runtime error
import { named as x } default-export

default-export-esModule

default-export-esModule-esm-reexport

default-export-esm

order

order-esModule

order-esm
undefined + errors syntax error
import { named as x } default-export-runtime

single-class-export

single-empty-string-export

single-function-export

single-promise-object-export

single-promise-object-with-default-export

single-promise-string-export

single-string-export

single-string-export-defined

single-string-export-duplicate

single-string-export-esm-reexport

single-string-export-getter

single-string-export-live

single-string-export-reexport
undefined syntax error
import { named as x } named-and-default-export-getter

named-and-default-export-getter-esModule

named-and-default-export-inherited

named-and-default-export-non-enumerable-inherited

named-and-default-export-runtime

named-and-default-export-runtime-esModule

named-and-null-default-export-runtime

named-and-null-default-export-runtime-esModule

named-export-runtime

named-export-runtime-esModule

single-object-export

single-object-with-default-export

single-object-with-default-export-duplicate

single-object-with-null-default-export
'named' syntax error
import { named as x }

import * as x; x.named

import * as x; ident(x).named
named-and-default-export-live 'named' 'named-outdated'
import { named as x } single-null-export type error syntax error
import * as x; x.named default-export

default-export-esModule

default-export-esModule-esm-reexport

default-export-esm

order

order-esModule

order-esm
undefined + errors undefined
import * as x; x.named

import * as x; ident(x).named
named-and-default-export-getter

named-and-default-export-getter-esModule

named-and-default-export-inherited

named-and-default-export-non-enumerable-inherited

named-and-default-export-runtime

named-and-default-export-runtime-esModule

named-and-null-default-export-runtime

named-and-null-default-export-runtime-esModule

named-export-runtime

named-export-runtime-esModule

single-object-export

single-object-with-default-export

single-object-with-default-export-duplicate

single-object-with-null-default-export
'named' undefined
import * as x; x.named single-null-export type error undefined
import { __esModule as x } default-export

default-export-esm

named-and-default-export

named-and-default-export-duplicate

named-and-default-export-esm

named-and-default-export-esm-esm-reexport

named-and-default-export-esm-reexport

named-and-default-export-getter

named-and-default-export-live

named-and-default-export-non-enumerable

named-and-default-export-reexport

named-and-null-default-export

named-and-null-default-export-non-enumerable

named-export

named-export-esm

named-export-non-enumerable

order

order-esm

require-circular

require-circular-self

require-conditional-execution

tla-esm

tla-esm-esm-reexport
true + errors syntax error
import { __esModule as x } default-export-runtime

named-and-default-export-getter-esModule

named-and-default-export-inherited

named-and-default-export-non-enumerable-inherited

named-and-default-export-runtime

named-and-default-export-runtime-esModule

named-and-null-default-export-runtime

named-and-null-default-export-runtime-esModule

named-export-runtime

named-export-runtime-esModule

single-class-export

single-empty-string-export

single-function-export

single-null-export

single-object-export

single-object-with-default-export

single-object-with-default-export-duplicate

single-object-with-null-default-export

single-promise-object-export

single-promise-object-with-default-export

single-promise-string-export

single-string-export

single-string-export-defined

single-string-export-duplicate

single-string-export-esm-reexport

single-string-export-getter

single-string-export-live

single-string-export-reexport
true syntax error
import * as x; x.__esModule default-export

default-export-esm

named-and-default-export

named-and-default-export-duplicate

named-and-default-export-esm

named-and-default-export-esm-esm-reexport

named-and-default-export-esm-reexport

named-and-default-export-getter

named-and-default-export-live

named-and-default-export-non-enumerable

named-and-default-export-reexport

named-and-null-default-export

named-and-null-default-export-non-enumerable

named-export

named-export-esm

named-export-non-enumerable

order

order-esm

require-circular

require-circular-self

require-conditional-execution

tla-esm

tla-esm-esm-reexport
true + errors undefined
import * as x; x.__esModule default-export-runtime

named-and-default-export-getter-esModule

named-and-default-export-inherited

named-and-default-export-non-enumerable-inherited

named-and-default-export-runtime

named-and-default-export-runtime-esModule

named-and-null-default-export-runtime

named-and-null-default-export-runtime-esModule

named-export-runtime

named-export-runtime-esModule

single-class-export

single-empty-string-export

single-function-export

single-null-export

single-object-export

single-object-with-default-export

single-object-with-default-export-duplicate

single-object-with-null-default-export

single-promise-object-export

single-promise-object-with-default-export

single-promise-string-export

single-string-export

single-string-export-defined

single-string-export-duplicate

single-string-export-esm-reexport

single-string-export-getter

single-string-export-live

single-string-export-reexport
true undefined
import * as x; ident(x).__esModule default-export

default-export-esm

default-export-runtime

named-and-default-export

named-and-default-export-duplicate

named-and-default-export-esm

named-and-default-export-esm-esm-reexport

named-and-default-export-esm-reexport

named-and-default-export-getter

named-and-default-export-getter-esModule

named-and-default-export-inherited

named-and-default-export-live

named-and-default-export-non-enumerable

named-and-default-export-non-enumerable-inherited

named-and-default-export-reexport

named-and-default-export-runtime

named-and-default-export-runtime-esModule

named-and-null-default-export

named-and-null-default-export-non-enumerable

named-and-null-default-export-runtime

named-and-null-default-export-runtime-esModule

named-export

named-export-esm

named-export-non-enumerable

named-export-runtime

named-export-runtime-esModule

order

order-esm

require-circular

require-circular-self

require-conditional-execution

single-class-export

single-empty-string-export

single-function-export

single-null-export

single-object-export

single-object-with-default-export

single-object-with-default-export-duplicate

single-object-with-null-default-export

single-promise-object-export

single-promise-object-with-default-export

single-promise-string-export

single-string-export

single-string-export-defined

single-string-export-duplicate

single-string-export-esm-reexport

single-string-export-getter

single-string-export-live

single-string-export-reexport

tla-esm

tla-esm-esm-reexport
true undefined
x = require(); x.default

x = require(); ident(x).default
default-export-esModule-esm-reexport

named-and-default-export-esModule-esm-reexport

named-and-default-export-esm-reexport
undefined 'default'
x = require(); x.default

x = require(); ident(x).default

{ named } = require()

x = require(); x.named

x = require(); ident(x).named

{ __esModule } = require()

x = require(); x.__esModule

x = require(); ident(x).__esModule

x = require()
tla-esModule

tla-esModule-esm-reexport
compilation error require(tla esm) not allowed
x = require(); x.default

x = require(); ident(x).default

{ named } = require()

x = require(); x.named

x = require(); ident(x).named

{ __esModule } = require()

x = require(); x.__esModule

x = require(); ident(x).__esModule
tla-esm

tla-esm-esm-reexport
undefined require(tla esm) not allowed
{ __esModule } = require()

x = require(); x.__esModule

x = require(); ident(x).__esModule
named-and-default-export-esm-esm-reexport

named-and-default-export-esm-reexport

named-export-esm

order-esm

single-string-export-esm-reexport
true undefined
x = require() default-export-esModule-esm-reexport { [__esModule], [Module] } { [__esModule], default }
x = require() default-export-esm { [__esModule], default: [G], [Module] } [Module: null prototype] { __esModule, default, [Module] }
x = require() named-and-default-export-esModule-esm-reexport { [__esModule], named: [G], [Module] } { [__esModule], named, default }
x = require() named-and-default-export-esm { [__esModule], default: [G], named: [G], [Module] } [Module: null prototype] { __esModule, default, named, [Module] }
x = require() named-and-default-export-esm-esm-reexport

named-export-esm
{ [__esModule], named: [G], [Module] } [Module: null prototype] { named, [Module] }
x = require() named-and-default-export-esm-reexport { [__esModule], named: [G], [Module] } { named, default }
x = require() order-esm { [__esModule], a: [G: 'a'], b: [G: 'b'], c: [G: 'c'], [Module] } [Module: null prototype] { a, b, c, [Module] }
x = require() single-string-export-esm-reexport { '0': [G: 's'], '1': [G: 'i'], '2': [G: 'n'], '3': [G: 'g'], '4': [G: 'l'], '5': [G: 'e'], [__esModule], [Module] } 'single'
x = require() tla-esm Promise { { [__esModule], default: [G], named: [G], [Module] }, Symbol(webpack exports): { [__esModule], default: [G], named: [G], [Module] }, Symbol(webpack queues): { [Function (anonymous)] [length]: 1, [name]: '' } } require(tla esm) not allowed
x = require() tla-esm-esm-reexport Promise { { [__esModule], named: [G], [Module] }, Symbol(webpack exports): { [__esModule], named: [G], [Module] }, Symbol(webpack queues): { [Function (anonymous)] [length]: 1, [name]: '' } } require(tla esm) not allowed
await import() === require() default-export-esModule

default-export-esModule-esm-reexport

default-export-esm

named-and-default-export-babel-getter

named-and-default-export-esModule

named-and-default-export-esModule-duplicate

named-and-default-export-esModule-esm-reexport

named-and-default-export-esModule-reexport

named-and-default-export-esm

named-and-default-export-esm-reexport

named-and-default-export-getter-esModule

named-and-default-export-runtime-esModule

named-and-null-default-export-esModule

named-and-null-default-export-runtime-esModule

named-export-esModule

named-export-runtime-esModule

order-esModule

single-string-export-esm-reexport
true false
await import() === require() tla-esm

tla-esm-esm-reexport
false require(tla esm) not allowed
import * as x; x === await import() default-export

default-export-esModule

default-export-runtime

named-and-default-export

named-and-default-export-babel-getter

named-and-default-export-duplicate

named-and-default-export-esModule

named-and-default-export-esModule-duplicate

named-and-default-export-esModule-reexport

named-and-default-export-getter

named-and-default-export-getter-esModule

named-and-default-export-inherited

named-and-default-export-live

named-and-default-export-non-enumerable

named-and-default-export-non-enumerable-inherited

named-and-default-export-reexport

named-and-default-export-runtime

named-and-default-export-runtime-esModule

named-and-null-default-export

named-and-null-default-export-esModule

named-and-null-default-export-non-enumerable

named-and-null-default-export-runtime

named-and-null-default-export-runtime-esModule

named-export

named-export-esModule

named-export-non-enumerable

named-export-runtime

named-export-runtime-esModule

order

order-esModule

require-circular

require-circular-self

require-conditional-execution

single-class-export

single-empty-string-export

single-function-export

single-null-export

single-object-export

single-object-with-default-export

single-object-with-default-export-duplicate

single-object-with-null-default-export

single-promise-object-export

single-promise-object-with-default-export

single-promise-string-export

single-string-export

single-string-export-defined

single-string-export-duplicate

single-string-export-getter

single-string-export-live

single-string-export-reexport
false true