Кастомное сообщение при подключении ESM через require



Если попытаться подключить ESM-пакет внутри CommonJS, Node.js выдаст вам ошибку. По ней, в принципе, достаточно понятно, что надо что-то поменять, но Зак Лезерман делится рецептом, как выдать кастомное сообщение, если ваш пакет уже не поддерживает CommonJS.



Для начала нужно попросить Node.js использовать разные файлы для разных способов импорта, внутри package.json пакета.





{

"type": "module",

"main": "./lib.js",

"exports": {

"import": "./lib.js",

"require": "./libCommonJs.cjs"

}

}





А затем внутри cjs-файла осознанно упасть.





try {

module.exports = require("./lib.js");

} catch (e) {

if(e.code === "ERR_REQUIRE_ESM") {

throw new Error("Oops. It's not the module you are looking for.");

}

throw e;

}





Как верно замечает Зак, Node.js планирует скоро сделать так, чтобы внутри require можно было загружать и ESM-модули (с некоторыми ограничениями), так что лайфхак временный.



https://www.zachleat.com/web/future-friendly-esm/