اجرا در ترمینال

همان داشبورد را با دستور ⁦text run⁩ به‌صورت تمام‌صفحه در ترمینال اجرا کنید.

اپ این فصل در کنسول شما در حال اجراست. آن را با ⌘⌥JCtrl+Shift+J⌘⌥KCtrl+Shift+K⌘⌥C باز کنید (ابتدا ویژگی‌های توسعه‌دهنده را فعال کنید)، سپس امتحانش کنید.
تماشای فصل3:31

در این فصل

  • `text run`
  • خروج با `q`
  • ⁦CLI⁩ اختصاصی شما
  • تفاوت‌ها

دستور text run همان برنامه را در ترمینال اجرا می‌کند. چیدمان، کامپوننت‌ها، نقشهٔ کلیدها و کنترل‌گرهای مسیر مشترک هستند و خروجی به‌جای spanهای CSS با %c، از نوع ANSI با رنگ واقعی است.

text run

یک اسکریپت اضافه و آن را اجرا کنید:

package.json+2-1json
  "scripts": {    "dev": "text dev",    "build": "text build",حذف‌شده:     "start": "text start"افزوده‌شده:     "start": "text start",افزوده‌شده:     "tui": "text run"  },
bun run tui                        # render ./app at /bun run tui -- --path /deployments # start on another route

دستور text run همهٔ فایل‌های app/ را وارد می‌کند، ⁦App Router⁩ را با تاریخچه‌ای در حافظه سوار می‌کند و آن را به‌صورت تمام‌صفحه رسم می‌کند. <Link>، useRouter()، notFound() و redirect() بدون تغییر کار می‌کنند و فراخوانی‌های هم‌مبدأ fetch("/api/…") کنترل‌گرهای مسیر شما را در همان فرایند اجرا می‌کنند. میان‌بر Ctrl+C برنامه را می‌بندد و سابقهٔ پیمایش شما را بازیابی می‌کند. به Bun نیاز دارد.

خروج با q

کاربران ترمینال انتظار کلید q را دارند. متد useApp().exit() برنامه را آن‌مانت می‌کند و ترمینال را به حالت قبل برمی‌گرداند؛ در مرورگر، برنامهٔ کنسول را آن‌مانت می‌کند.

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

⁦CLI⁩ اختصاصی شما

برای یک کامپوننت، از renderToTerminal استفاده کنید. این تابع یک عنصر را بدون ⁦App Router⁩ مانت می‌کند و فراخوانی fetch("/api/…") فقط هنگام اجرا با text run به کنترل‌گرهای مسیر شما دسترسی دارد، پس داده‌های کامپوننت را به آن بدهید:

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();

آن را با دستور bun cli.tsx اجرا کنید. کامپوننت DeploymentsPage ردیف‌هایش را واکشی می‌کند، پس به text run نیاز دارد.

تفاوت‌ها

ترمینال‌ها سریع‌تر بازنقاشی می‌کنند (تا 60 fps به‌جای حدود 15) و اندازهٔ شبکه را به‌جای کنسول متصل‌شده به لبهٔ پنجره، با خود پنجره تنظیم می‌کنند. تصاویر به‌جای URL به داده‌های پیکسلی نیاز دارند. بقیهٔ موارد، از جمله این داشبورد، از همان کد استفاده می‌کنند.

امتحان کنید

این Acme Deploys در پایان فصل است که در DevTools اجرا می‌شود. روی پد کلیک کنید، سپس از کلیدهای زیر استفاده کنید.

▼ 09 · اجرا در ترمینال

باز کردن کنسول

⌘⌥J
CtrlShiftJ
⌘⌥K
CtrlShiftK
⌘⌥C

برنامه در DevTools رندر می‌شود.ابتدا گزینهٔ «نمایش قابلیت‌ها برای توسعه‌دهندگان وب» را در تنظیمات Safari ← پیشرفته فعال کنید. سپس اینجا کلیک کنید و ⁦Enter⁩ را فشار دهید.

باز کردن در رایانه

این برنامه در کنسول DevTools رندر می‌شود که به مرورگر دسکتاپ نیاز دارد.

آزمون

2 پرسش

برای تکمیل فصل به همهٔ پرسش‌ها پاسخ دهید.

وقتی برنامه در ترمینال اجرا می‌شود چه تغییر می‌کند؟

 

برنامه چگونه از خودش خارج می‌شود؟