Node.js loader for import specifiers as file paths without extensions or as directory paths
Install:
npm i extensionless
Start node with the following flag added.
--import=extensionless/register
Note: If node version is lower than 20.6.0, this doesn't work and it needs this flag instead:
--experimental-loader=extensionless
You can now use import specifiers as file paths without extensions or as directory paths:
// imports from the first existing file in the candidates list as follows
import mod from './mod'
// ['./mod.js', './mod/index.js']
import mod from '../mod' with {type: 'json'}
// ['../mod.json', '../mod/index.json']
import api from '/apps/api'
// ['/apps/api.js', '/apps/api/index.js']
import web from 'file:///apps/web'
// ['file:///apps/web.js', 'file:///apps/web/index.js']
To configure this module, add the field extensionless to your project's package.json:
"extensionless": {
"lookFor": ["js", "mjs", "cjs"]
}| Field | Default Value |
|---|---|
lookFor |
["js"] |
Note: If you use the flag --experimental-transform-types with node, the value "ts" is automatically prepended to the array lookFor, so that you won't need to configure it manually.
When it can be deduced from the specifier that its target is a directory, the resolver looks for only the index files:
// imports from the first existing file in the candidates list as follows
import cur from '.'
// ['./index.js']
import up from '..'
// ['../index.js']
import mod from './mod/'
// ['./mod/index.js']
import mod from '../mod/' with {type: 'json'}
// ['../mod/index.json']
import api from '/apps/api/'
// ['/apps/api/index.js']
import web from 'file:///apps/web/'
// ['file:///apps/web/index.js']
This loader also adds support for Windows path resolution with which you can use forward or backward slashes as separators.
import mod from '.\\mod'
// ['./mod.js', './mod/index.js']
import mod from '..\\mod\\' with {type: 'json'}
// ['../mod/index.json']
import api from 'C:/apps/api'
// ['/C:/apps/api.js', '/C:/apps/api/index.js']
import web from 'C:\\apps\\web\\'
// ['/C:/apps/web/index.js']