Запуск в терминале
Рендерите приложение App Router или отдельный компонент в терминале с text run и renderToTerminal.
text run рендерит приложение App Router в терминале. Макет, компоненты, раскладки клавиш и обработчики маршрутов используются и в браузере. Вывод использует truecolor ANSI вместо span с %c.
text run # render ./app at /text run --path /logs # start on another routeНажмите Ctrl+C для выхода. Для text run нужен Bun.
text run
text run импортирует каждый файл в app/, монтирует App Router с историей в памяти и отрисовывает его на весь экран. <Link>, useRouter(), notFound() и redirect() работают без изменений.
Вызовы fetch("/api/...") к тому же источнику запускают ваши обработчики route.ts в текущем процессе, точно так же, как их обслуживает text dev. Запросы к другим URL отправляются в сеть.
renderToTerminal
Для отдельного компонента или собственного CLI:
import { renderToTerminal } from "@textjs/app/terminal";import { App } from "./app";const app = await renderToTerminal(<App />);await app.waitUntilExit();useApp().exit() размонтирует приложение и восстанавливает терминал.
| Параметр | Описание |
|---|---|
stdin / stdout | По умолчанию process.stdin / process.stdout |
cols / rows | Фиксированный размер (по умолчанию: по размеру терминала) |
altScreen | Восстановление истории прокрутки при выходе (по умолчанию true) |
mouse | Прокрутка колёсиком (по умолчанию true) |
exitOnCtrlC | По умолчанию true |
fps | Предел частоты кадров (по умолчанию 60) |
patchConsole | Задержка вывода console.* до выхода (по умолчанию true) |
theme / transparent | Как в createConsoleRoot |
Вывод
Каждый кадр сравнивается с предыдущим построчно. Записываются только изменённые строки, обрамлённые маркерами синхронизированного вывода, поэтому терминалы с их поддержкой никогда не показывают частично отрисованный кадр. Простаивающие приложения ничего не записывают.
Ввод
Ввод stdin в необработанном режиме преобразуется в те же события, что создаёт браузер: стрелки и функциональные клавиши с модификаторами, комбинации с Alt, вставка с маркерами, колёсико мыши SGR и клавиатурный протокол kitty. TerminalInputParser и parseTerminalInput экспортируются, если они нужны вам в другом месте.
Различия
| Возможность | DevTools | Терминал |
|---|---|---|
| Частота кадров | ~15 кадров/с | До fps |
| Размер сетки | Закреплённая консоль | Окно терминала |
<Image src> | Загрузка через canvas | Используйте pixels |
console.log | Ваши кадры | Вывод задерживается до выхода |