Автор Zod собрал Bun-подобный тулкит, который не меняет рантайм Node

Nub запускает TypeScript-файл в 2,9 раза быстрее, чем tsx, и выполняет скрипты package.json в 24 раза быстрее, чем pnpm run. Под капотом — обычный node с Rust-обвязкой.

Вкратце

Nub — бинарник на Rust, подключающий транспилятор oxc к Node через module.registerHooks() и --import preload: TypeScript, JSX и .env загружаются без шага сборки на рантайме, который уже везде есть.

Мейнтейнер ArkType говорит, что перенёс весь монорепозиторий без единой проблемы. Но знаток внутренностей Node поднял вопрос о хуке --require: он может незаметно сломать top-level await в ESM.

Тулкит, который дополняет node, а не заменяет его

Nub: Bun-подобный тулкит для Node.js
Nub: Bun-подобный тулкит для Node.js

Bun и Deno продавали скорость, подменяя рантайм целиком. Nub делает ставку на обратное: оставить stock node, прикрепив быстрые части на Rust. Единый бинарник запускает TypeScript, JSX и JavaScript без шага сборки (nub file.ts), автоматически подгружает .env, .yaml, .toml и .jsonc, а в одном инструменте объединяет пакетный менеджер, раннер скриптов, аналог npx под названием nubx и менеджер версий Node.

Цифры — главный аргумент. Запуск файла: в 2,9 раза быстрее tsx; nub run выполняет скрипты package.json примерно в 24 раза быстрее pnpm run, пропуская JS-бутстрап ради нативного бинарника; nubx обходит npx в 19 раз; установка пакетов — в 2,5 раза быстрее pnpm, с блокировкой postinstall и проверкой вредоносных пакетов через osv.dev. Под капотом — возможности, которые Node приобрёл за последние годы: preload через --import/--require, module.registerHooks() для транспиляции и резолюции, N-API аддоны со встроенным транспилятором oxc.

Происхождение — и те, кто читает хуки

Автор не новичок. Комментатор в треде добавляет контекст, который README не педалирует:

«Главный автор Nub — Колин Макдоннелл, создавший Zod и даже работавший в Bun.» — разработчик, представивший проект

Ранние пользователи появились быстро. Один мейнтейнер open-source сообщает о чистой миграции в масштабе:

«Только что смержил PR с переводом всего монорепозитория на nub. Ноль проблем, невероятно быстро.» — автор ArkType, TypeScript-валидатора

Потом пришли те, кто знает загрузчик Node изнутри, и похвала стала условной. Один насторожился из-за механизма preload:

«Меня удивляет использование хука --require вместо --import… интересно, как nub обрабатывает нюансы ESM… Предполагаю, что top-level await затронет значимый процент пользователей.» — разработчик, реализовывавший загрузчик модулей Node

Продакшн-инженер спросил о том, что бенчмарки обходят стороной:

«Можно ли запускать это в продакшне на бэкенде, или всё равно нужно транспилировать и бандлить?.. Каков ожидаемый прирост поверхности атаки?» — инженер, проверяющий продакшн-историю

Главный вопрос Nub — не скорость. Сможет ли стратегия «дополняй, не заменяй» выдержать граничные случаи, которые Bun определял на собственных условиях?

Получайте такие разборы каждый день

Главные истории Hacker News — на email, в Telegram или RSS.

Следующая новость · 27 из 32 Читать дальше
🚀Tech

Чтобы опубликовать крейт в Rust, до сих пор нужен аккаунт GitHub

У crates.io с первого дня существует единственный способ войти: аккаунт GitHub. Если GitHub заблокирует вас — или просто упадёт — публикация остановится. В Rust-проекте это признают проблемой уже десять лет.

★ 156 · 💬 58 · infosec.exchange · 2 мин