Skip to main content

الأصول العامة (مجلد public/)

يحتوي مجلد public/ في جذر تطبيقك على ملفات ثابتة — صور وأيقونات وخطوط وأي أصول أخرى يحتاجها تطبيقك وقت التشغيل. تُدرج هذه الملفات تلقائيًا في عمليات البناء، وتُزامَن أثناء وضع التطوير، وتُرفَع إلى الخادم. الملفات الموضوعة في public/ هي:
  • متاحة للعامة — بمجرد مزامنتها إلى الخادم، تُقدَّم الأصول عبر عنوان URL عام. لا حاجة إلى مصادقة للوصول إليها.
  • متاحة في المكوّنات الأمامية — استخدم عناوين الأصول لعرض الصور أو الأيقونات أو أي وسائط داخل مكوّنات React لديك.
  • متاحة في الدوال المنطقية — أشِر إلى عناوين الأصول في رسائل البريد الإلكتروني أو استجابات واجهات البرمجة أو أي منطق على جهة الخادم.
  • مستخدمة لبيانات تعريف السوق — يشير حقلا logoUrl وscreenshots في defineApplication() إلى ملفات من هذا المجلد (مثل public/logo.png). تُعرَض هذه عند نشر تطبيقك في السوق.
  • تُزامَن تلقائيًا في وضع التطوير — عند إضافة ملف في public/ أو تحديثه أو حذفه، تتم مزامنته إلى الخادم تلقائيًا. لا حاجة لإعادة التشغيل.
  • مضمَّنة في عمليات البناء — يقوم yarn twenty build بتجميع جميع الأصول العامة ضمن مخرجات التوزيع.

الوصول إلى الأصول العامة باستخدام getPublicAssetUrl

استخدم المساعد getPublicAssetUrl من twenty-sdk للحصول على العنوان الكامل لملف في دليل public/ لديك. يعمل ذلك في كلٍ من الدوال المنطقية والمكوّنات الأمامية. في دالة منطقية:
src/logic-functions/send-invoice.ts
في مكوّن أمامي:
src/front-components/company-card.tsx
وسيطة path نسبية إلى مجلد public/ الخاص بتطبيقك. كلٌّ من getPublicAssetUrl('logo.png') وgetPublicAssetUrl('public/logo.png') يُحلاّن إلى العنوان نفسه — تتم إزالة بادئة public/ تلقائيًا إن وُجدت.

استخدام حِزَم npm

يمكنك تثبيت واستخدام أي حزمة npm في تطبيقك. يتم تجميع كلٍ من الدوال المنطقية والمكوّنات الأمامية باستخدام esbuild، والذي يُضمّن جميع التبعيات ضمن المخرجات — لا حاجة إلى node_modules وقت التشغيل.

تثبيت حزمة

ثم استوردها في شيفرتك:
src/logic-functions/fetch-data.ts
وينطبق الأمر نفسه على المكوّنات الأمامية:
src/front-components/chart.tsx

كيف يعمل التجميع

تستخدم خطوة البناء أداة esbuild لإنتاج ملف واحد مستقل لكل دالة منطقية ولكل مكوّن أمامي. تُضمَّن جميع الحزم المستوردة داخل الحزمة. الدوال المنطقية تعمل في بيئة Node.js. الوحدات المدمجة في Node (fs وpath وcrypto وhttp وغيرها) متاحة ولا تحتاج إلى تثبيت. المكوّنات الأمامية تعمل ضمن Web Worker. وحدات Node المدمجة غير متاحة — المتاح فقط واجهات برمجة المتصفّح وحِزَم npm التي تعمل في بيئة المتصفّح. كلتا البيئتين تحتويان على twenty-client-sdk/core وtwenty-client-sdk/metadata كوحدات متاحة مُسبقًا — لا تُضمَّن هذه ضمن الحزم بل تُحلّ وقت التشغيل بواسطة الخادم.

اختبار تطبيقك

يوفّر SDK واجهات برمجة قابلة للتنفيذ برمجيًا تمكّنك من بناء تطبيقك ونشره وتثبيته وإلغاء تثبيته من شيفرة الاختبار. بالاقتران مع Vitest وعملاء واجهة البرمجة مضبوطي الأنواع، يمكنك كتابة اختبارات تكامل تتحقّق من أن تطبيقك يعمل من البداية إلى النهاية مقابل خادم Twenty حقيقي.

إعداد

يتضمّن التطبيق المُولَّد بالقالب بالفعل Vitest. إذا أعددته يدويًا، فثبّت التبعيات:
أنشئ vitest.config.ts في جذر تطبيقك:
vitest.config.ts
أنشئ ملف إعداد يتحقّق من إمكانية الوصول إلى الخادم قبل تشغيل الاختبارات:
src/__tests__/setup-test.ts

واجهات SDK البرمجية

يُصدِّر المسار الفرعي twenty-sdk/cli دوالًا يمكنك استدعاؤها مباشرةً من شيفرة الاختبار: تُرجع كل دالة كائن نتيجة يحتوي على success: boolean وعلى إمّا data أو error.

كتابة اختبار تكامل

إليك مثالًا كاملًا يبني التطبيق وينشره ويثبّته، ثم يتحقّق من ظهوره في مساحة العمل:
src/__tests__/app-install.integration-test.ts

تشغيل الاختبارات

تأكّد من تشغيل خادم Twenty المحلي لديك، ثم:
أو في وضع المراقبة أثناء التطوير:

التحقق من الأنواع

يمكنك أيضًا تشغيل التحقق من الأنواع على تطبيقك دون تشغيل الاختبارات:
يشغِّل هذا الأمر tsc --noEmit ويبلغ عن أي أخطاء في الأنواع.

مرجع CLI

بالإضافة إلى dev وbuild وadd وtypecheck، يوفّر CLI أوامر لتنفيذ الدوال وعرض السجلات وإدارة تثبيتات التطبيقات.

تنفيذ الدوال (yarn twenty exec)

تشغيل دالة منطقية يدويًا دون تشغيلها عبر HTTP أو cron أو حدث قاعدة بيانات:

عرض سجلات الدوال (yarn twenty logs)

بثّ سجلات التنفيذ لدوال تطبيقك المنطقية:
يختلف هذا عن yarn twenty server logs، الذي يعرض سجلات حاوية Docker. يعرض yarn twenty logs سجلات تنفيذ دوال تطبيقك من خادم Twenty.

إلغاء تثبيت تطبيق (yarn twenty uninstall)

أزل تطبيقك من مساحة العمل النشطة:

إدارة الريموتات

الريموت هو خادم Twenty يتصل به تطبيقك. أثناء الإعداد، تُنشئ أداة إنشاء الهيكل واحدًا لك تلقائيًا. يمكنك إضافة ريموتات أخرى أو التبديل بينها في أي وقت.
تُخزَّن بيانات اعتمادك في ~/.twenty/config.json.

التكامل المستمر (CI) باستخدام GitHub Actions

تولّد أداة إنشاء الهيكل سير عمل GitHub Actions جاهزًا للاستخدام في .github/workflows/ci.yml. يشغّل اختبارات التكامل لديك تلقائيًا عند كل دفع إلى main وعلى طلبات السحب. سير العمل:
  1. يجلب الشيفرة الخاصة بك
  2. يشغّل خادم Twenty مؤقتًا باستخدام الإجراء twentyhq/twenty/.github/actions/spawn-twenty-docker-image
  3. يثبّت التبعيات باستخدام yarn install --immutable
  4. يشغّل yarn test مع حقن TWENTY_API_URL وTWENTY_API_KEY من مخرجات الإجراء
.github/workflows/ci.yml
لا تحتاج إلى تهيئة أي أسرار — إذ يبدأ إجراء spawn-twenty-docker-image خادم Twenty عابرًا مباشرة في المشغّل ويُخرِج تفاصيل الاتصال. يتم توفير السر GITHUB_TOKEN تلقائيًا من قِبل GitHub. لتثبيت إصدار محدّد من Twenty بدلًا من latest، غيّر متغير البيئة TWENTY_VERSION في أعلى سير العمل.