
แอพเริ่มต้นที่มีความเห็นสำหรับเว็บแอปพลิเคชันเต็มรูปแบบใน 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 ทำ:
boot build <target-dir>
uberjar ที่เรียกว่า "app- (เวอร์ชัน) -standalone.jar" จะพบได้ในไดเรกทอรีเป้าหมาย หมายเลขเวอร์ชันโครงการสามารถตั้งค่าใน build.boot
การกำหนดค่าได้รับการจัดการผ่านไฟล์ EDN ภายใต้ไดเรกทอรี resources/config base.edn ให้การกำหนดค่าพื้นฐานที่ใช้กับสภาพแวดล้อมทั้งหมดในขณะที่ทั้งสองโปรไฟล์ dev.edn และ prod.edn จะถูกโหลดในสภาพแวดล้อมที่เกี่ยวข้องและมีความสำคัญกว่า base.edn นอกจากนี้ในเวลาโหลดไฟล์กำหนดค่าจะถูกตรวจสอบกับ Config schema ที่อยู่ใน domain.cljc
การกำหนดค่าส่วนหน้ามีให้ผ่าน API ที่ GET /api/config และจัดเตรียมชุดย่อยของการกำหนดค่าตามที่กำหนดไว้ใน FrontendConfig schema ใน domain.cljc
API แบ็กเอนด์หลักสามารถพบได้ใน api.clj และเขียนใน compojure-api นอกจากนี้ยังมีการสอนเกี่ยวกับการทำงานกับไวยากรณ์ Compojure-API
การฉีดพึ่งพาและการจัดการส่วนประกอบของระบบได้รับการจัดการผ่านระบบและโมเดล RAAMWERK นี่คือสิ่งที่ช่วยให้การโหลดใหม่ของแบ็กเอนด์สด แต่ยังจัดเตรียมส่วนประกอบทั้งหมดของแอพ (เซิร์ฟเวอร์แบบคงที่และ API, การกำหนดค่า, DB ฯลฯ ) ตัวสร้างหลักสำหรับสิ่งเหล่านี้พบได้ใน app.systems มีฟังก์ชั่น build-system พื้นฐานซึ่งใช้ชื่อโปรไฟล์การกำหนดค่าและสร้างแผนที่ระบบพื้นฐานสำหรับโปรไฟล์นั้นจากนั้นฟังก์ชั่นที่สร้างระบบ Prod และ Dev
สิ่งสำคัญที่สุดคือ :site-endpoint ซึ่งเป็นส่วนประกอบที่จัดการเส้นทางคงที่เช่นดัชนีหลักและชี้ไปที่ app.routes/site และ :api-endpoint ซึ่งเป็นส่วนประกอบของ REST API และชี้ไปที่ app.api/api-routes แต่ละฟังก์ชั่นเหล่านี้ใช้อาร์กิวเมนต์เดียว (เรียกว่า sys โดยอนุสัญญา) ซึ่งเป็นชุดย่อยของแผนที่ระบบที่มีคีย์ที่แสดงเป็นพึ่งพาในเวกเตอร์ที่ส่งผ่านไปยัง component/using ดังนั้นเพื่อให้ส่วนประกอบสามารถใช้ได้กับจุดสิ้นสุดจำเป็นต้องเพิ่มคีย์ของมันลงในเวกเตอร์นี้
การโยกย้ายฐานข้อมูลได้รับการจัดการด้วยส่วนประกอบ ragtime ซึ่งกำหนดค่าให้ทำงานโดยอัตโนมัติบนเซิร์ฟเวอร์เริ่มต้นหรือโหลดซ้ำ การโยกย้ายอยู่ใน resources/db/migrations ซึ่งมีไฟล์ .up.sql และ .down.sql สำหรับการย้ายถิ่นชื่อตามโครงการที่อธิบายไว้ในเอกสาร Ragtime แผนที่การกำหนดค่า ragtime มีให้บริการจาก System-Map As :migrations และสามารถเข้าถึงได้จากการ REPL หรือจากส่วนประกอบใด ๆ ที่สืบทอดมาเป็นการพึ่งพา แผนที่นี้สามารถส่งผ่านไปยังฟังก์ชั่นใน ragtime.repl สำหรับการรันหรือย้อนกลับการอพยพกลับด้วยตนเอง
สำหรับ SQL Abstraction นั้น Honeysql จะใช้ที่ด้านบนของ Clojure.java.jdbc Honeysql ให้วิธีการเขียนแบบสอบถาม SQL เป็นแผนที่ซึ่งสามารถสร้างและประกอบเป็นแผนที่ Clojure อื่น ๆ แล้วจัดรูปแบบลงใน SQL เพื่อโทรด้วยไดรเวอร์ JDBC ฟังก์ชั่นผู้ช่วย, app.query/make-query มีให้ใน query.sql สำหรับการห่อการโทรไปยังไดรเวอร์ JDBC ดังนั้นเราจึงต้องการเพียงแผนที่ระบบและแผนที่ SQL แบบสอบถามเพื่อรับผลลัพธ์
ส่วนหน้าถูกสร้างขึ้นด้วยรีเอเจนต์โดยใช้การรวมกันของการจัดส่งหลายวิธีสำหรับการแสดงผลแต่ละมุมมองและการกำหนดเส้นทางฝั่งไคลเอ็นต์ด้วย Bide ดังนั้นการเพิ่มมุมมองย่อยใหม่จึงต้องใช้ขั้นตอนสองสามขั้นตอนที่สำคัญที่ต้องจดจำ:
app.views เนมสเปซเช่น app.views.foo ใน cljs/app/views/foo.cljsapp.views.dispatch/dispatch-view หลายวิธีและสร้างวิธีการหลายวิธีของคุณเองเพื่อส่งจากคีย์ที่เหมาะสมเช่น :app.foo วิธีการควรใช้สองอาร์กิวเมนต์แรกคือคีย์ตัวเองตัวที่สองคือพารามิเตอร์ใด ๆ จาก URIindex.cljsrouter.cljs สถานะแอพหลักจะถูกเก็บไว้ในอะตอมรีเอเจนต์ที่ใช้ร่วมกันที่ app.state/app-state app.api เคชั่นเนมสเปซมีให้สำหรับการโทร API ทั่วไป
หมายเหตุสำคัญเกี่ยวกับการกำหนดเส้นทาง: เมื่อเชื่อมโยงไปยังส่วนประกอบอื่นภายในแอพควรใช้ฟังก์ชัน app.router/app-link เป็น hooks ในระบบการกำหนดเส้นทาง Hrefs ปกติจะใช้งานได้ แต่บังคับให้โหลดหน้าใหม่ซึ่งจะช้าลงและรีเซ็ตสถานะแอพ
นอกเหนือจากส่วนหน้าและแบ็กเอนด์แล้วยังมีเนมสเปซทั่วไปบางตัวผ่านไฟล์ .cljc ใน src/cljc/app ซึ่งอนุญาตให้ใช้ข้อมูลและฟังก์ชั่นที่สำคัญในด้านหน้าและด้านหลัง สิ่งที่สำคัญที่สุดคือ app.domain ใน src/cljc/app/domain.cljc สิ่งนี้ให้คำแนะนำข้อมูลทั่วไปสำหรับแอปพลิเคชันรวมถึงสคีมาสำหรับไฟล์การกำหนดค่า
Docker-compose.yml ได้รับการจัดเตรียมเพื่อเริ่มการกำหนดค่า postgres ขั้นพื้นฐานด้วยการตั้งค่าเริ่มต้นที่อธิบายไว้ข้างต้นด้วย docker-compose up ง่ายขึ้น
การกำหนดค่าเริ่มต้นจะเปิดการเชื่อมต่อ NREPL ไปยังทั้งสองส่วนที่พอร์ต 6809 และแบ็กเอนด์ที่พอร์ต 6502
นอกจากนี้ยังมีองค์ประกอบเพิ่มเติมรีเอเจนต์ -Dev-tools ที่เพิ่มเข้ามาในหน้าในโหมด 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 แน่นอนว่าคุณจะต้องใช้ Chrome
แอพนี้มีพื้นฐานมาจากการใช้เทมเพลตระบบพร้อมคำแนะนำเพิ่มเติมจาก Tenzing
พัฒนาโดย Annaia Danvers (@Jarcane) การพัฒนาทำให้เป็นไปได้โดย Futurice
ลิขสิทธิ์ (c) 2018 Annaia Danvers รหัสนี้มีการแจกจ่ายภายใต้ใบอนุญาตสาธารณะ Eclipse v2.0 หรือรุ่นใหม่ ๆ สำหรับข้อมูลเพิ่มเติมดู LICENSE ในไดเรกทอรีราก