TGViewer
mefody.dev mefody.dev @mefody_dev · 5.39K subscribers
Post #211 4.32K
Кастомное сообщение при подключении 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/
Zach Leatherman Improved error messaging for require(ESM) in Node.js—zachleat.com A post by Zach Leatherman (zachleat)
  • 👍 21
  • 🌚 10
  • ❤ 1
  • 🤣 1
More from @mefody_dev
  1. Sep 25, 2026Эффект одометра Люблю такие демки, когда на чистом CSS делают что-то необычное, для чего я…
  2. Sep 23, 2026Цена ошибок гидрации В React есть много ухищрений, чтобы серверный кусок страницы обновилс…
  3. Sep 16, 2026Какие анимации более производительные: CSS или JS? Лучше пару раз увидеть, чем много откуд…
  4. Sep 14, 2026Единица измерения lh Если коротко, то 1lh = 1 line height. И это не размер шрифта, который…
  5. Sep 11, 2026<mermaid-element> Ещё одна полезная библиотека. Брамус собрал кастомный элемент, которому…
  6. Sep 10, 2026MicroLighter Дейв Руперт собрал маленькую библиотечку, которая делает подсветку кода. «Ещё…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →