JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2436
  • Score
    100M100P100Q134238F
  • License LGPL 2.1

Node.js loader for import specifiers as file paths without extensions or as directory paths

Package Exports

  • specifier-resolution-node
  • specifier-resolution-node/register

Readme

Node.js loader for import specifiers as file paths without extensions or as directory paths This is package intend to make the extensionless project works with import-meta-resolve algorithm so that its closer to the behavior of node.js 18 with --experimental-loader=specifier-resolution-node

 

Install:

npm i specifier-resolution-node

 

Start node with one of the following flags added. If you're running on a version of node older than 20.6.0, use:

--experimental-loader=specifier-resolution-node

or else, use the newer one instead:

--import=specifier-resolution-node/register

 

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' assert {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']

 

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/' assert {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']