Executar em um terminal
Execute o mesmo painel em tela cheia em um terminal com text run.
Neste capítulo
- `text run`
- Sair com `q`
- Sua própria CLI
- O que muda
text run executa o mesmo app em um terminal. Layout, componentes, mapas de teclas e manipuladores de rota são compartilhados, e a saída usa ANSI truecolor em vez de spans CSS com %c.
text run
Adicione um script e execute-o:
"scripts": { "dev": "text dev", "build": "text build",Removido: "start": "text start"Adicionado: "start": "text start",Adicionado: "tui": "text run" },bun run tui # render ./app at /bun run tui -- --path /deployments # start on another routetext run importa todos os arquivos de app/, monta o App Router com um histórico em memória e o desenha em tela cheia. <Link>, useRouter(), notFound() e redirect() funcionam sem alterações, e chamadas fetch("/api/…") de mesma origem executam seus manipuladores de rota no mesmo processo. Ctrl+C encerra o app e restaura seu histórico de rolagem. Requer Bun.
Sair com q
Quem usa terminal espera q. useApp().exit() desmonta o app e restaura o terminal; no navegador, desmonta o app do console.
Adicionado: import { useApp } from "@textjs/app";export default function RootLayout({ children }: { children?: ReactNode }) {Adicionado: const app = useApp(); useInput((e) => { if (e.key === "backspace") router.back();Adicionado: if (e.input === "q") app.exit(); });Sua própria CLI
Para um único componente, use renderToTerminal. Ele monta um elemento sem o App Router, e fetch("/api/…") só acessa seus manipuladores de rota com text run, então passe os dados ao componente:
import { renderToTerminal } from "@textjs/app/terminal";import { Table } from "@textjs/app";import { DEPLOYMENTS } from "./lib/deployments";const columns = [{ key: "commit", header: "Commit" }, { key: "project", header: "Project", width: 10 }];const app = await renderToTerminal(<Table columns={columns} rows={DEPLOYMENTS} autoFocus />);await app.waitUntilExit();Execute com bun cli.tsx. DeploymentsPage busca suas linhas, por isso precisa de text run.
O que muda
Terminais repintam mais rápido (até 60 fps em vez de ~15) e dimensionam a grade pela janela em vez do console acoplado. Imagens precisam de dados de pixels em vez de uma URL. Todo o resto, incluindo este painel, usa o mesmo código.
Experimentar
Este é Acme Deploys ao final do capítulo, rodando no DevTools. Clique na área de entrada e use as teclas abaixo.
Abrir o console
O app renderiza no DevTools.Primeiro ative “Mostrar recursos para desenvolvedores web” em Ajustes do Safari → Avançado. Depois clique aqui e pressione Enter.
Abrir em um computador
Este app renderiza no console do DevTools, que precisa de um navegador de computador.
Questionário
2 perguntasResponda a todas as perguntas para concluir o capítulo.