С ESM практически нет проблем если пишем клиентский код (для браузера), но в случае с Node.js проблем хватает и нередко выгодней иметь код в CJS. Я писал тред про Dual package, там расписано про ESM в контексте Nodejs:

- В ESM нет __dirname и __filename (можно вычислить, но лишние несколько строк кода)

- Нет require.resolve() (можно получить через createRequire(), но опять лишний код)

- Сложнее загрузить JSON (с адопшеном asserts должно стать проще, но дело будущего)

- Ну и вот тут про Native modules, require.main, require.cache и NODE_PATH



Так что я бы не был столько категоричным, и дело не только в ресурсах на миграцию.