Суть технологии: от кода к машинному языку
Лаборатория Vercel Labs выпустила Scriptc — экспериментальный компилятор, который преобразует TypeScript и JavaScript в нативные исполняемые файлы (для macOS, Linux, Windows) и модули WebAssembly. Ключевое отличие от традиционных инструментов (вроде Webpack или esbuild) заключается в том, что итоговый бинарник не требует установленной Node.js для запуска. Он работает как самостоятельное приложение, скомпилированное в машинный код.
Компилятор использует статическую типизацию TypeScript для генерации оптимизированного машинного кода. Все импортируемые npm-пакеты «впекаются» в исполняемый файл, поэтому во время выполнения программа не обращается к папке node_modules. Если Scriptc не может скомпилировать часть кода, он выдает диагностику на этапе сборки с подсказками по исправлению.
Технические детали и установка
Для работы с компилятором требуется Node.js версии 24 или новее. Сам процесс установки и запуск модулей WASI (через scriptc run) требуют Node.js, но финальные бинарники работают автономно. Поддерживается кросс-компиляция и сборка WebAssembly.
Установка осуществляется через npm:
npm install -g scriptc
Проверка совместимости существующего проекта перед компиляцией выполняется командой scriptc coverage, которая показывает, какая часть кода поддерживает компиляцию.
Примеры использования
Scriptc поддерживает значительный subset API Node.js, включая работу с сетью и файловой системой. Ниже приведены примеры базовых сценариев:
- Простой скрипт: Компиляция
hello.tsв бинарникhello, который выводит текст без интерпретатора. - HTTP-сервер: Использование
node:httpдля создания сервера, который затем компилируется в нативный исполняемый файл. - Работа с npm-пакетами: Импорт библиотек (например,
picocolors) происходит на этапе сборки, делая бинарник самодостаточным.
Ограничения и статус проекта
Проект находится на стадии экспериментальной разработки. Поддерживается не весь функционал JavaScript/TypeScript и Node.js. Разработчикам рекомендуется предварительно проверять свои проекты через отчеты покрытия (coverage reports), чтобы убедиться в совместимости кода с компилятором. Полный список поддерживаемых API и ограничений доступен в официальной документации на GitHub.
Источник: Github ↗
