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", import.meta.url, {
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:
node --import ./register-hooks.js main.jsTo 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",
});