Node.js встроил замену axios, nodemon, dotenv и Jest

Node.js встроил замену axios, nodemon, dotenv и Jest

Node.js получил набор встроенных API и флагов, которые заменяют популярные npm-пакеты для тестов, HTTP-запросов, перезапуска приложений, загрузки .env и парсинга CLI. В материале перечислены 12 таких встроенных возможностей, их статус в Node 24 и ограничения по сравнению с пакетами.

В Node.js появилось несколько встроенных альтернатив привычным зависимостям из package.json. В списке — замены для axios, nodemon, dotenv, Jest, Mocha, chalk, glob и других пакетов, а также указание на статус стабильности в Node 24 и на то, чего встроенные API пока не умеют.

Статусы в Node 24

Автор сверил данные с документацией Node 24 API docs 24.21.0, которая относится к Active LTS на сентябрь 2026 года, и запускал примеры на Node 26.0.0. В материале отдельно отмечено, что Node 22 находится в maintenance до апреля 2027 года, Node 20 завершил жизненный цикл 30 апреля 2026 года, а Node 26 станет следующим LTS 28 октября 2026 года.

Для встроенных API Node использует шкалу Stability: 2 означает stable, а 1 — experimental с подуровнями 1.0, 1.1 и 1.2. Экспериментальные возможности могут меняться или исчезать в minor-релизах, поэтому статус важен для production.

Что уже заменяет пакеты

  • node:sqlite заменяет better-sqlite3. В Node 24 модуль имеет статус 1.2, release candidate, начиная с 24.15.0. Он работает только через префикс node:, а не через обычный sqlite. Встроенный драйвер синхронный, как и better-sqlite3, но не содержит db.transaction(fn).
  • node:test и node:assert заменяют Jest и Mocha. В Node 24 тестовый раннер стабилен с Node 20.0.0, а node:assert стабилен уже давно. Запуск выполняется через node --test, который сам находит файлы вида math.test.js.
  • fetch() заменяет axios и node-fetch. В Node 24 он стабилен с Node 21.0.0 и основан на undici. Вместе с ним доступны Request, Response, Headers и FormData как глобальные объекты.
  • node --watch заменяет nodemon. В Node 24 режим стабилен с 22.0.0 и 20.13.0. Он перезапускает процесс при изменениях в entry-файле и импортируемых модулях.
  • --env-file и process.loadEnvFile() заменяют dotenv. В Node 24 они стабильны с 24.10.0 и 22.21.0. Оба умеют читать quoted values, multiline values в кавычках и комментарии #.
  • util.parseArgs() заменяет yargs, commander и minimist. В Node 24 он стабилен с Node 20.0.0 и поддерживает только типы string и boolean.

У каждого встроенного решения есть ограничения. fetch() не отклоняет ответ на 404 или 500, не имеет interceptors и automatic retries, а прокси из HTTP_PROXY и HTTPS_PROXY игнорируются без --use-env-proxy или NODE_USE_ENV_PROXY=1. node --watch по умолчанию следит только за entry-файлом и импортами, не отслеживает JSON, шаблоны и .env, а --watch-path работает только на macOS и Windows.

Для --env-file отмечено, что он выбрасывает ошибку, если файл отсутствует, и для необязательных файлов есть --env-file-if-exists=.env. Встроенная загрузка .env не делает variable expansion, поэтому URL=http://${HOST}:3000 останется строкой с $. process.loadEnvFile() также запускается слишком поздно для NODE_OPTIONS из файла.

У util.parseArgs() нет number, --help, subcommands и встроенной валидации, а неизвестные опции по умолчанию вызывают ошибку. Для node:test часть возможностей всё ещё экспериментальна: coverage требует --experimental-test-coverage, module mocking находится за --experimental-test-module-mocks, а watch mode для тестов тоже experimental. При этом t.mock.fn() и spies уже стабильны.

Больше про фронтенд в канале @front_end_dev

11