التشغيل في الطرفية
شغّل لوحة المعلومات نفسها بملء الشاشة في الطرفية باستخدام text run.
في هذا الفصل
- `text run`
- الخروج باستخدام `q`
- واجهة سطر أوامر خاصة بك
- الاختلافات
يشغّل الأمر text run التطبيق نفسه في الطرفية. يشترك التطبيق في التخطيط والمكوّنات وخرائط المفاتيح ومعالجات المسارات، ويكون الخرج بتنسيق ANSI بالألوان الحقيقية بدلًا من عناصر span بتنسيق CSS مع %c.
text run
أضف برنامجًا نصيًا وشغّله:
"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() تركيب التطبيق ويستعيد الطرفية؛ وفي المتصفح يفكّ تركيب تطبيق وحدة التحكم.
المضاف: 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(); });واجهة سطر أوامر خاصة بك
لعرض مكوّن واحد، استخدم renderToTerminal. يركّب عنصرًا واحدًا دون App Router، ولا يصل الاستدعاء fetch("/api/…") إلى معالجات المسارات إلا عند التشغيل باستخدام text run، لذا مرّر البيانات إلى المكوّن:
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 إطارًا في الثانية بدلًا من نحو 15)، وتضبط حجم الشبكة وفقًا للنافذة بدلًا من وحدة التحكم المثبّتة. تتطلب الصور بيانات البكسل بدلًا من عنوان URL. يستخدم كل ما عدا ذلك، بما فيه لوحة المعلومات هذه، الشيفرة نفسها.
جرّبه
هذا تطبيق Acme Deploys في نهاية الفصل، يعمل في DevTools. انقر اللوحة، ثم استخدم المفاتيح أدناه.
فتح وحدة التحكم
يُعرض التطبيق في DevTools.فعّل أولًا «إظهار الميزات لمطوري الويب» في إعدادات Safari → متقدم. ثم انقر هنا واضغط Enter.
الفتح على حاسوب مكتبي
يُعرض هذا التطبيق في وحدة تحكم DevTools، التي تتطلب متصفحًا على حاسوب مكتبي.
اختبار
2 سؤالانأجب عن كل سؤال لإكمال الفصل.