Skip to content

joyeecheung/test-module-condition

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

4 Commits

Repository files navigation

This is a repository used to test a new exports condition in Node.js that can be used to point to an ESM file no matter the package is loaded using import or require, so that it supports shipping patterns like this:

{"type": "module","exports": {"node": {// On new version of Node.js, both require() and import get the ESM version"module": "./index.js",// On older version of Node.js, where "module" and require(esm) are not supported,// use the transpiled CJS version for require(). Library authors decide// to drop support for older versions of Node.js when they think it's time."require": "./dist/index.cjs"},// On any other environment, or when it's imported on older version of Node.js,// use the ESM version."default": "./index.js"}}

This is taking the existing module condition already supported by bundlers. See https://gist.github.com/sokra/e032a0f17c1721c71cfced6f14516c62

Tested output

Native node

Using nodejs/node#54648

$ ../node/out/Release/node workspace/src/import.mjs import-module-require import module-and-import module module-and-require module module-import-require module module-only module module-require-import module require-module-import module $ ../node/out/Release/node --experimental-require-module workspace/src/require.cjs import-module-require module module-and-import module module-and-require module module-import-require module module-only module module-require-import module require-module-import require 

Webpack

The bundled version runs the same as the native version:

$ npm run webpack $ node workspace/webpack/require.bundle.js import-module-require module module-and-import module module-and-require module module-import-require module module-only module module-require-import module require-module-import require $ node workspace/webpack/import.bundle.js import-module-require import module-and-import module module-and-require module module-import-require module module-only module module-require-import module require-module-import module 

esbuild

The bundled version runs the same as the native version:

$ npm run esbuild $ node workspace/esbuild/require.bundle.js import-module-require module module-and-import module module-and-require module module-import-require module module-only module module-require-import module require-module-import require $ node workspace/esbuild/import.bundle.js import-module-require import module-and-import module module-and-require module module-import-require module module-only module module-require-import module require-module-import module 

Rollup

Unlike the previous two, rollup does not seem to support insertion-order priorities of module conditions, and "module" always take precedence.

$ npm run rollup $ node workspace/rollup/require.bundle.js import-module-require module module-and-import module module-and-require module module-import-require module module-only module module-require-import module require-module-import module $ node workspace/rollup/import.bundle.js import-module-require module module-and-import module module-and-require module module-import-require module module-only module module-require-import module require-module-import module 

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published