
تطبيق بداية مشتركة لتطبيقات الويب الكاملة في Clojure
ستحتاج إلى تثبيت التمهيد ، بالإضافة إلى Java 1.8+ ، و PostgreSQL 9.6+. ينصح Docker أيضًا بالتنمية المحلية.
أفضل طريقة لبدء مشروع جديد هي النقر ببساطة على زر "استخدام هذا القالب" في الجزء العلوي من صفحة Github. بالتناوب ، إذا كنت لا ترغب في استخدام GitHub لمشروعك ، فيمكنك تنزيل Master .zip ، واستخراجه محليًا ، و git init من هناك.
لبدء بيئة DEV:
docker-compose up &
boot dev
سيبدأ هذا في الواجهة الخلفية وتجميع الواجهة الأمامية ، مع استضافة الموقع على LocalHost: 7000. يمكن العثور أيضًا على وثائق API في http: // localhost: 7000/api-docs
لبناء المشروع إلى Uberjar Do:
boot build <target-dir>
سيتم العثور على uberjar يسمى "App- (الإصدار) -Standalone.jar" في الدليل المستهدف. يمكن تعيين رقم إصدار المشروع في build.boot .
تتم معالجة التكوين عبر ملفات EDN ضمن دليل resources/config . يوفر base.edn التكوين الأساسي الذي ينطبق على جميع البيئات ، في حين يتم تحميل ملف التعريف ، dev.edn و prod.edn في بيئات كل منهما ويأخذ الأسبقية على base.edn . بالإضافة إلى ذلك ، في وقت التحميل ، يتم فحص ملفات التكوين مقابل مخطط Config الموجود في domain.cljc .
يتم توفير تكوين الواجهة الأمامية عبر API في GET /api/config ، ويوفر مجموعة فرعية من التكوين كما هو محدد في مخطط FrontendConfig في domain.cljc .
يمكن العثور على واجهة برمجة تطبيقات الواجهة الخلفية الرئيسية في api.clj ويتم كتابتها في compojure-api. هناك أيضًا برنامج تعليمي حول العمل مع بناء جملة Compojure-API.
يتم التعامل مع حقن التبعية ومعالجة مكونات النظام عبر النظام ونموذج Raamwerk. هذا هو ما يمكّن إعادة التحميل المباشر للواجهة الخلفية ، ولكنه أيضًا ينظم جميع مكونات التطبيق (خوادم static و API ، التكوين ، DB ، إلخ). تم العثور على المنشئين الرئيسيين لهذه في app.systems . هناك وظيفة build-system أساسي يأخذ اسم ملف تعريف التكوين وينتج خريطة النظام الأساسي لهذا الملف الشخصي ، ثم الوظائف التي تنتج أنظمة prod و dev.
من أهم ملاحظة :site-endpoint ، وهي المكون الذي يتولى طرق ثابتة مثل الفهرس الرئيسي والنقاط إلى app.routes/site ، و :api-endpoint ، وهو المكون ل API REST ، ويشير إلى app.api/api-routes . تأخذ كل من هذه الوظائف وسيطة واحدة (تسمى sys بواسطة الاتفاقية) ، وهي مجموعة فرعية من خريطة النظام ، تحتوي على المفاتيح المدرجة كتبعيات في المتجه المنقولة إلى component/using . لذلك لكي يكون مكونًا متاحًا للنقطة النهائية ، يجب إضافة مفتاحه إلى هذا المتجه.
تتم معالجة ترحيل قاعدة البيانات مع مكون RagTime ، وتم تكوينه لتشغيله تلقائيًا على الخادم أو إعادة تحميله. توجد عمليات الترحيل في resources/db/migrations ، والتي تحتوي على ملفات .up.sql و .down.sql للترحيل ، المسمى وفقًا للمخطط الموضح في وثائق Ragtime. تتوفر خريطة Config Ragtime من خريطة النظام على النحو التالي :migrations وبالتالي يمكن الوصول إليها من RELP أو من أي مكون يرثها على أنها تبعية. يمكن نقل هذه الخريطة إلى الوظائف في ragtime.repl لتشغيل أو التراجع يدويًا.
لتجريد SQL ، يتم استخدام HoneySQL أعلى clojure.java.jdbc. يوفر Honeysql طريقة لكتابة استعلامات SQL كخرائط ، والتي يمكن بناءها وتتألف منها كأي خريطة clojure أخرى ، ثم تنسيق في SQL للاتصال باستخدام برنامج تشغيل JDBC. يتم توفير وظيفة مساعد ، app.query/make-query في query.sql
تم تصميم الواجهة الأمامية مع كاشف ، باستخدام مجموعة من الإرسال متعدد المناطق لتقديم كل طريقة عرض ، وتوجيه من جانب العميل مع العزف. على هذا النحو ، تتطلب إضافة عرض فرعي جديد بضع خطوات مهمة لتذكرها:
app.views ، أي. app.views.foo في cljs/app/views/foo.cljsapp.views.dispatch/dispatch-view multimethod ، وقم بإنشاء multimethod الخاص بك للإرسال من مفتاح مناسب ، أي. :app.foo . يجب أن تأخذ الطريقة وسيطتين ، الأول هو المفتاح نفسه ، والثاني هو أي معلمات من URI.index.cljs .router.cljs . يتم الاحتفاظ بحالة التطبيق الرئيسية في ذرة كاشف مشتركة في app.state/app-state . يتم توفير مساحة اسم app.api أيضًا لمكالمات API الشائعة.
ملاحظة مهمة فيما يتعلق بالتوجيه: عند الارتباط بمكون آخر داخل التطبيق ، من الأفضل استخدام وظيفة app.router/app-link حيث يتم ربط هذا في نظام التوجيه. ستعمل HREFs العادية ، ولكن معيد تحديث الصفحة ، والتي ستكون أبطأ وأيضًا إعادة تعيين حالة التطبيق.
بالإضافة إلى الواجهة الأمامية والخلفية ، هناك أيضًا بعض مساحات الأسماء الشائعة عبر ملفات .cljc في src/cljc/app ، والتي تسمح بمشاركة البيانات والوظائف الرئيسية عن طريق الأمام والخلف. أهم هذه هي app.domain في src/cljc/app/domain.cljc . يوفر هذا مخططات البيانات الشائعة للتطبيق ، بما في ذلك مخطط ملفات التكوين.
تم توفير Docker-corm.yml لبدء تكوين Postgres أساسي مع الإعدادات الافتراضية الموضحة أعلاه مع docker-compose up بسيط.
سيفتح التكوين الافتراضي اتصالات NREPL لكل من الواجهة الأمامية في المنفذ 6809 ، والخلفية في المنفذ 6502.
يوجد أيضًا عنصر إضافي للكاشف في الأدوات المضافة إلى الصفحة في وضع DEV يوفر انعكاسًا لحالة التطبيق الحالية.
يتم توفير مهمة boot cljfmt والتي ستقوم بتشغيل CLJFMT على جميع الملفات في دليل SRC. تتوفر مهام check fix من Boot-ClJFMT مباشرةً ، ويمكن استخدامها لتشغيلها ضد الملفات أو الدلائل الفردية حسب الحاجة.
تم تكوين كل من رمز الواجهة الأمامية ورمز الواجهة الخلفية لإعادة التحميل تلقائيًا على تغييرات الملف. حتى أن هناك إشارة صوتية مفيدة لإعلامك بمجرد الانتهاء من إعادة البناء.
لاحظ أنه سيتم إعادة تشغيل نظام خادم الواجهة الخلفية الكاملة تمامًا فقط عندما تتغير بعض الملفات. تم تكوين هذا من خلال مهمة build.boot dev مع معلمة :files إلى خطوة system .
تم توفير بعض اختبارات التكامل الأساسية. يمكنك تشغيلها باستخدام boot test ، أو مع boot test-watch ، والذي سيبدأ مراقبًا وتشغيل جميع الاختبارات في تغيير الملف.
تتضمن الاختبارات اختبار المتصفح عبر etaoin ، وستحتاج أيضًا إلى تثبيت geckowebdriver المستند إلى Firefox. يمكن العثور على المعلومات والروابط حول كيفية القيام بذلك هنا. على MAC ، يمكن تثبيته باستخدام brew install geckodriver ، أو على Ubuntu مع firefox-geckowebdriver ، أو على Windows مع scoop install geckodriver . سوف تحتاج بالطبع بالطبع كروم.
يعتمد هذا التطبيق في الأصل على قمة النظام مع بعض التوجيهات الإضافية من Tenzing.
تم تطويره بواسطة Annaia Danvers (jarcane). التطوير أصبح ممكنا من قبل Futurice.
حقوق الطبع والنشر (C) 2018 Annaia Danvers. يتم توزيع الرمز تحت ترخيص Eclipse Public V2.0 أو أي إصدار لاحق. لمزيد من المعلومات ، راجع LICENSE في دليل الجذر.