NodeJS customization hooks to add support for import maps to NodeJS. This allows you to customize module resolution by creating a node.importmap file.
npm install --save @node-loader/import-maps pnpm install --save @node-loader/import-mapsCreate a file (e.g. node.importmap) in the current working directory:
{ "imports": { "my-module": "file:///home/name/code/my-module.js" } }Now create a file main.js that imports the mapped module:
import "my-module";Now create a startup module register-hooks.js:
import { register } from "node:module"; import { MessageChannel } from "node:worker_threads"; const messageChannel = new MessageChannel(); global.importMapPort = messageChannel.port1; register("@node-loader/import-maps", { data: { // optional, provides a way to update the import map later on port: messageChannel.port2, // optional, import map object importMap: { imports: {}, scopes: {}, }, // optional, file url resolved relative to current working directory // This option is ignored if importMap is provided importMapUrl: "./node.importmap", }, transferList: [messageChannel.port2], });Now run main.js with the --import NodeJS flag:
To dynamically change the import map after startup, do the following:
global.importMapPort.postMessage({ // Provide either importMap or importMapUrl, but not both importMap: { imports: {}, scopes: {}, }, importMapUrl: "./node.importmap", });node --import ./register-hooks.js main.js