VS Code
معاينة حية لإطار وحدة التحكم بجوار الشيفرة، وإنشاء هياكل App Router، ومقتطفات، وروابط أخطاء TX.
تعرض إضافة Text.js في VS Code إطار وحدة التحكم بجانب الشيفرة. وتعكس التطبيق الذي يعمل باستخدام text dev، أو تعرض الملف المفتوح نفسه عندما لا يكون أي تطبيق قيد التشغيل. وتضيف أيضًا إنشاء الهياكل الأولية لمسارات App Router، ومقتطفات شيفرة وروابط لرموز الأخطاء TX###.
التثبيت
ثبّت Text.js من Visual Studio Marketplace. في VS Code، افتح عرض الإضافات (⌘⇧X) وابحث عن textjs.vscode-textjs، أو شغّل:
code --install-extension textjs.vscode-textjsتنشط الإضافة في أي مجلد يحتوي على تطبيق Text.js: ملف text.config.ts، أو حزمة تعتمد على @textjs/app وتحتوي على دليل app/. وتعمل أيضًا في المستودعات الموحدة التي تضم عدة تطبيقات.
المعاينة المباشرة
افتح ملف page.tsx أو layout.tsx أو مكوّنًا، وشغّل Text.js: Open Preview (⌘K V)، أو انقر زر المعاينة في شريط عنوان المحرر. ترسم اللوحة الإطار بواجهة DevTools نفسها وخلايا خط Menlo نفسها المستخدمة في وحدة التحكم في المتصفح.
تحصل المعاينة على إطاراتها من أحد مصدرين. وتوضح الشارة في شريط الأدوات المصدر النشط:
| المصدر | التوقيت | ما يظهر |
|---|---|---|
| مباشر | يعمل text dev والتطبيق مفتوح في علامة تبويب بالمتصفح | التطبيق الفعلي، بحالته وبياناته وحجم شبكته |
| بلا واجهة | لا يوجد خادم تطوير، أو لا توجد علامة تبويب مفتوحة | الملف المفتوح، تعرضه الإضافة بحجم اللوحة |
يستخدم auto (الإعداد الافتراضي) المصدر المباشر عند توفره، والمصدر بلا واجهة في غير ذلك. ثبّت أحدهما من الشارة أو باستخدام textjs.preview.mode.
لوحة المفاتيح
انقر وحدة التحكم لإرسال ضغطات المفاتيح إلى التطبيق: تعمل الأسهم وTab والاختصارات والكتابة واللصق كما في المتصفح. انقر خارج وحدة التحكم للتوقف. تظل اختصارات المحرر مثل ⌘P و⌘⇧P موجهة إلى VS Code. ويرسل التمرير فوق وحدة التحكم أحداث عجلة التمرير.
يمكن كتابة مسار في حقل العنوان، مثل /deployments/dpl_a1، للتنقل في أي من المصدرين.
الوضع المباشر
عند فتح معاينة، يطلب خادم التطوير من علامات التبويب المتصلة بث إطاراتها. ترسل علامات التبويب الصفوف التي تغيرت فقط، وتتوقف عن الإرسال عند إغلاق المعاينة، فلا يتحمل التطبيق أي تكلفة إذا لم تكن له معاينة مفتوحة. يمر حفظ الملف عبر Fast Refresh، وتتحدث المعاينة مع علامة التبويب.
فعّل المتابعة (textjs.preview.followEditor) لنقل علامة تبويب المتصفح إلى مسار ملف page.tsx الذي تحرره.
لا تتلقى علامات التبويب في الخلفية إطارات رسوم متحركة، لذا تحتفظ عادة بإطاراتها حتى تظهر مجددًا. عند وجود معاينة تراقبها، ترسم علامة التبويب في الخلفية إطارًا فور وصول إدخال، فتستمر الكتابة في المعاينة في تحديث العرض. تتحدث الرسوم المتحركة في علامة التبويب في الخلفية نحو مرة واحدة في الثانية. ضع التطبيق في نافذة مستقلة للحفاظ على انسيابية الحركة.
الوضع بلا واجهة
تبدأ الإضافة مشغّلًا صغيرًا داخل المشروع. يحمّل ملفات المسارات باستخدام Vite و@textjs/app الخاصين بالمشروع، فتعمل الأسماء البديلة و TypeScript و JSX كما في text dev. ويركّب App Router عند مسار الملف المفتوح مع تخطيطاته، باستخدام سجل محفوظ في الذاكرة:
| الملف | المعاينة |
|---|---|
app/page.tsx | / |
app/(shop)/items/[id]/page.tsx | /items/id (تستخدم المقاطع الديناميكية أسماءها) |
app/blog/[[...slug]]/layout.tsx | /blog |
components/Card.tsx | التصدير الافتراضي، أو أول تصدير بصيغة PascalCase، دون خصائص |
تشغّل استدعاءات fetch("/api/...") من المصدر نفسه معالجات route.ts داخل العملية، كما في text run. تتبع الشبكة حجم اللوحة، ويؤدي حفظ أي ملف في التطبيق إلى عرضه مجددًا. تظهر الأخطاء فوق الإطار، مع روابط إلى صفحات TX### الخاصة بها.
الأوامر
| الأمر | الوصف |
|---|---|
| Text.js: Start Dev Server | يشغّل البرنامج النصي dev (أو text dev) في الطرفية |
| Text.js: Stop Dev Server | يوقف خادم تطوير بدأ من VS Code |
| Text.js: Open Preview | يفتح المعاينة المباشرة للملف النشط |
| Text.js: Open in Browser Console | يفتح المسار الحالي على خادم التطوير. ثم افتح وحدة التحكم في المتصفح |
| Text.js: New Page | app/<route>/page.tsx مع بيانات وصفية وparams محددة الأنواع |
| Text.js: New Layout | app/<route>/layout.tsx |
| Text.js: New Route Handler | app/<route>/route.ts مع GET وPOST |
| Text.js: New Loading UI / Error Boundary / Not Found Page | loading.tsx، error.tsx، not-found.tsx |
تتوفر أوامر إنشاء الهياكل الأولية أيضًا في قائمة سياق المجلدات في المستكشف. تقبل مقاطع App Router مثل settings وblog/[slug] وdocs/[...path] و(marketing)/about، وترفض وضع page وroute.ts في المقطع نفسه. تحصل مشاريع JavaScript (التي لا تحتوي على tsconfig.json) على ملفات .jsx و.js.
مقتطفات الشيفرة
| البادئة | المحتوى المُدرج |
|---|---|
txpage، txlayout، txloading، txerror | ملفات مسارات تحمل أسماء مجلداتها |
txc | مكوّن لوحدة التحكم يحمل اسم الملف |
txroute، txroutep | معالجات مسارات، بمعاملات أو دونها |
box، boxb، text، scrollbox، link، spinner | مكوّنات |
input، select، tabs | مكوّنات تفاعلية |
useInput، useKeymap، useFocus، useTheme، useViewport، useRouter، useInterval | خطافات |
metadata، txconfig | بيانات المسار الوصفية وtext.config.ts |
رموز الأخطاء
مرّر المؤشر فوق رمز TX### في أي موضع: في الشيفرة المصدرية أو السجلات أو لوحة الإخراج أو تتبع مكدس ملصق. تعرض نافذة التمرير عنوانه ورسالته وحزمته، مع رابط إلى صفحته على textjs.org. وكل رمز هو أيضًا رابط (انقر مع الضغط على ⌘).
شريط الحالة
يعرض العنصر ▼ حالة خادم التطوير وحجم شبكة وحدة التحكم، مثل ▼ :3000 120×36. ترسل علامات التبويب حجمها إلى خادم التطوير كلما تغير، حتى دون وجود معاينة مفتوحة. انقر العنصر للوصول إلى الأوامر الرئيسية.
الإعدادات
| الإعداد | القيمة الافتراضية | الوصف |
|---|---|---|
textjs.preview.mode | auto | auto أو live أو headless |
textjs.preview.followEditor | false | الوضع المباشر: متابعة المسار الجاري تحريره |
textjs.preview.fontSize | 12 | حجم خط الخلية (تستخدم DevTools الحجم 12) |
textjs.preview.runtime | ملف Node.js الثنائي للمعاينات بلا واجهة (الافتراضي: الملف المرفق مع VS Code) | |
textjs.devServer.url | عنوان URL لخادم التطوير (الافتراضي: الاكتشاف على المنافذ 3000–3010). لا تُستخدم إلا عناوين الاسترجاع المحلي عبر http:// | |
textjs.devServer.command | أمر Start Dev Server |
الثقة بمساحة العمل
تشغّل المعاينة وخادم التطوير شيفرة المشروع (إعدادات Vite وtext.config.* والمكوّنات). في الوضع المقيّد، لا توفر الإضافة إلا مقتطفات الشيفرة وإنشاء الهياكل الأولية وروابط الأخطاء، وتتجاهل textjs.preview.runtime وtextjs.devServer.command وtextjs.devServer.url من إعدادات مساحة العمل. امنح الثقة لمساحة العمل لتفعيل المعاينة. لا تُعرض أبدًا معاينات للملفات خارج مجلدات مساحة العمل.
آلية العمل
يوفر text dev ثلاث نقاط نهاية للمحررات. لا تستجيب إلا لاتصالات الاسترجاع المحلي الموجهة إلى مضيف استرجاع محلي (localhost، 127.0.0.1، [::1])، وللطلبات التي لا تحتوي على Origin أو التي تحمل مصدر خادم التطوير نفسه. تُرفض طلبات المتصفحات العابرة للمواقع وطلبات no-cors:
| نقطة النهاية | |
|---|---|
GET /__textjs/status | جذر المشروع وعلامات التبويب المتصلة وحجم الشبكة والمسار الحالي |
GET /__textjs/frames | أحداث مرسلة من الخادم: حدث frame واحد لكل تغيير، مرمّز على هيئة فروق بين الصفوف |
POST /__textjs/input | مفتاح أو لصق أو نص من محرر أسلوب الإدخال (IME) أو مفتاح تركيب (text)، أو عجلة تمرير أو تنقل لعلامة التبويب. يتطلب JSON والترويسة x-textjs-mirror: 1، فلا تستطيع المواقع الأخرى إرسال ضغطات مفاتيح |
ترسل علامات التبويب الإطارات إلى خادم التطوير عبر مقبس HMR في Vite، الذي يتطلب رمزًا مميزًا خاصًا بكل خادم. يُصدّر تنسيق النقل من @textjs/app/frame-protocol (FrameEncoder، FrameDecoder، parseInputMessage) إذا أردت بناء عارض خاص بك. لا يوجد أي من ذلك في مخرجات text build.