Запуск в терминале

Рендерите приложение 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:

cli.tsxtsx
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Ваши кадрыВывод задерживается до выхода
Изменить эту страницу на GitHub