Menjalankan di terminal

Jalankan dasbor yang sama dalam layar penuh di terminal dengan text run.

Aplikasi bab ini berjalan di konsol Anda. Buka dengan ⌘⌥JCtrl+Shift+J⌘⌥KCtrl+Shift+K⌘⌥C (aktifkan fitur pengembang terlebih dahulu), lalu coba aplikasinya.
Tonton bab3:31

Dalam bab ini

  • `text run`
  • Keluar dengan `q`
  • CLI Anda sendiri
  • Perbedaannya

text run menjalankan aplikasi yang sama di terminal. Layout, komponen, keymap, dan route handler dipakai bersama, dan keluarannya berupa ANSI truecolor alih-alih span CSS %c.

text run

Tambahkan skrip dan jalankan:

package.json+2-1json
  "scripts": {    "dev": "text dev",    "build": "text build",Dihapus:     "start": "text start"Ditambahkan:     "start": "text start",Ditambahkan:     "tui": "text run"  },
bun run tui                        # render ./app at /bun run tui -- --path /deployments # start on another route

text run mengimpor setiap file di app/, memasang App Router dengan riwayat dalam memori, dan menggambarnya dalam layar penuh. <Link>, useRouter(), notFound() dan redirect() tetap berfungsi tanpa perubahan, dan pemanggilan fetch("/api/…") dengan origin yang sama menjalankan route handler Anda dalam proses yang sama. Ctrl+C keluar dan memulihkan riwayat gulir Anda. Ini memerlukan Bun.

Keluar dengan q

Pengguna terminal mengharapkan q. useApp().exit() melepas aplikasi dan memulihkan terminal; di browser, ini melepas aplikasi konsol.

app/layout.tsx+3tsx
Ditambahkan: import { useApp } from "@textjs/app";export default function RootLayout({ children }: { children?: ReactNode }) {Ditambahkan:   const app = useApp();  useInput((e) => {    if (e.key === "backspace") router.back();Ditambahkan:     if (e.input === "q") app.exit();  });

CLI Anda sendiri

Untuk satu komponen, gunakan renderToTerminal. Fungsi ini memasang satu elemen tanpa App Router, dan fetch("/api/…") hanya menjangkau route handler Anda saat dijalankan melalui text run, jadi teruskan datanya ke komponen:

cli.tsxtsx
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();

Jalankan dengan bun cli.tsx. DeploymentsPage mengambil data barisnya, jadi memerlukan text run.

Perbedaannya

Terminal menggambar ulang lebih cepat (hingga 60 fps alih-alih ~15) dan menyesuaikan ukuran kisi dengan jendela, bukan konsol yang ditambatkan. Gambar memerlukan data piksel alih-alih URL. Selebihnya, termasuk dasbor ini, menggunakan kode yang sama.

Coba

Ini Acme Deploys di akhir bab, berjalan di DevTools. Klik pad, lalu gunakan tombol di bawah.

▼ 09 · Menjalankan di terminal

Buka konsol

⌘⌥J
CtrlShiftJ
⌘⌥K
CtrlShiftK
⌘⌥C

Aplikasi ini di-render di DevTools.Aktifkan dahulu “Tampilkan fitur untuk pengembang web” di Setelan Safari → Lanjutan. Lalu klik di sini dan tekan Enter.

Buka di desktop

Aplikasi ini di-render di konsol DevTools, yang memerlukan browser desktop.

Kuis

2 pertanyaan

Jawab semua pertanyaan untuk menyelesaikan bab.

Apa yang berubah saat aplikasi berjalan di terminal?

 

Bagaimana aplikasi menutup dirinya sendiri?