supports-esm
Version:
Detect at runtime if Node.js supports ECMAScript modules
54 lines (39 loc) • 1.59 kB
Markdown
# supports-esm
[![NPM version][npm-image]][npm-url]
[![build status][ci-image]][ci-url]
[![npm download][download-image]][download-url]
[![License][license-image]][license-url]
Detect at runtime if Node.js supports ECMAScript modules.
## Installation
`$ npm install supports-esm`
## Usage
This library exports `true` if the current Node.js version is considered to have
reasonable support for ESM features, `false` otherwise.
Version 1.x returns `true` if the following features are all present:
- Dynamic imports
- "exports" field in `package.json`, including conditional exports
- Package self-reference
One notable use case is to conditionally execute an ESM or CommonJS entrypoint
from a "bin" script, such as a command-line interface authored in ESM and
transpiled to CommonJS for backwards compatibility:
```js
'use strict';
const supportsESM = require('supports-esm');
if (supportsESM) {
import('../src/cli.js').catch((error) => {
console.error(error);
process.exit(1);
});
} else {
require('../build-cjs/cli.js');
}
```
This snippet works in all Node.js versions >= 10.0.0.
[npm-image]: https://img.shields.io/npm/v/supports-esm.svg
[npm-url]: https://npmjs.org/package/supports-esm
[ci-image]: https://github.com/targos/supports-esm/workflows/Test/badge.svg?branch=master
[ci-url]: https://github.com/targos/supports-esm/actions?query=workflow%3ATest
[download-image]: https://img.shields.io/npm/dm/supports-esm.svg
[download-url]: https://npmjs.org/package/supports-esm
[license-image]: https://img.shields.io/npm/l/supports-esm.svg
[license-url]: LICENSE