is-file-esm
Determines whether a Node file is a Module (
import
) or a Script (require
)
Algorithm
Determining the module system of a file comes from three inputs, the type
field
of the closest package.json
to that file, the file extension (.js
, .mjs
or .cjs
)
and the lesser know --input-type
command-line flag. The latter only applies to
dyamic input (via STDIN, --eval
or --print
flags) so is not considered with this library.
So to determine whether a file is an esm file (e.g. native EcmaScript modules) or not, we use the following procedure:
read package.json for "type" field,
if type is "module"
if answer.mjs -> module
if answer.js -> module
if answer.cjs -> script
if type is "commonjs"
if answer.mjs -> module
if answer.js -> script
if answer.cjs -> script
if type is not set
if answer.mjs -> module
if answer.js -> script
if answer.cjs -> script
API
The is-file-esm
module provides synchronous, awaitable (promise-based) and callback based APIs.
In each case the Result object has the following shape:
esm: Boolean // true if file is a Module, false if it is a Script type: String // the determined package.json type, may be undefined, 'module', or 'commonjs' extType: String // the file extension type, may be 'c', 'm' or 'j' path: String // the input path pkgPath: String // the path to the package.json from which the type was determined
Awaitable (promise-based)
await isFileEsm(path) => Result
const esm path = await if esm console else console
Callback-style
isFileEsm(path, cb(err, Result))
const isFileEsm =
Synchronous
isFileEsm.sync(path) => Result
const esm path = isFileEsm if esm console else console
Test
npm test
test/index.js ..................................... 213/213
total ............................................. 213/213
213 passing (927.584ms)
ok
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
index.js | 100 | 100 | 100 | 100 | |
----------|----------|----------|----------|----------|-------------------|
License
MIT