
Clojure中全堆棧Web應用程序的自以置信的入門應用程序
您將需要安裝啟動,以及Java 1.8+和PostgreSQL 9.6+。還建議Docker進行本地開發。
啟動新項目的最佳方法是單擊GitHub頁面頂部的“使用此模板”按鈕。或者,如果您不希望將GitHub用於您的項目,則可以下載Master .zip,在本地提取它,然後從那裡git init 。
開始開發環境:
docker-compose up &
boot dev
這將啟動後端和前端彙編,並在Localhost上託管網站:7000。 API文檔也可以在http:// localhost上找到:7000/api-docs
為了建立Uberjar的項目:
boot build <target-dir>
一個稱為“ App-(版本)-standalone.jar”的Uberjar將在目標目錄中找到。可以在build.boot中設置項目版本號。
配置通過resources/config目錄下的EDN文件處理。 base.edn提供了適用於所有環境的基本配置,而兩個配置文件dev.edn和prod.edn則在其各自的環境中加載並優先於base.edn 。此外,在加載時間上,對位於domain.cljc中的Config架構進行了檢查。
前端配置是通過API在GET /api/config提供的,並提供了domain.cljc中FrontendConfig架構中定義的配置子集。
主要後端API可以在api.clj中找到,並用Compojure-API編寫。還有一個關於使用Compojure-API語法的教程。
依賴注入和系統組件處理是通過系統和RAAMWERK模型處理的。這就是使後端實時重新加載的方法,但還可以安排應用程序的所有組件(靜態和API服務器,配置,DB等)。這些主要的構造函數在app.systems中找到。有一個基本build-system函數,該功能獲取配置配置文件名稱並為該配置文件生成基本系統映射,然後產生生產和開發系統的功能。
最重要的是: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配置映射可從系統映射AS :migrations ,因此可以從replocation或任何將其作為依賴關係繼承的組件訪問。該地圖可以傳遞到ragtime.repl中的函數,以手動運行或滾回遷移。
對於SQL抽象,HoneySQL用於clojure.java.jdbc的頂部。 HoneySQL提供了一種編寫SQL查詢作為地圖的方法,因此可以作為任何其他Clojure地圖構建並組成,然後格式化為SQL以與JDBC驅動程序致電。在query.sql中提供了一個輔助功能, app.query/make-query用於將調用撥打給JDBC驅動程序,因此只需要提供系統映射和SQL查詢映射即可獲得結果。
前端是用試劑構建的,使用多途徑調度的組合來渲染每個視圖,並使用偏向的客戶端路由。因此,添加一個新的子視圖需要一些重要的步驟要記住:
app.views名稱空間中創建您的視圖,即。 app.views.foo在cljs/app/views/foo.cljs中app.views.dispatch/dispatch-view multimeThod,並創建自己的多方法從合適的密鑰,即。 :app.foo 。該方法應進行兩個參數,第一個是關鍵本身,第二個是URI的任何參數。index.cljs中需要新的名稱空間。router.cljs中的路線。主應用程序狀態保存在app.state/app-state的共享試劑原子中。也為常見API調用提供了一個app.api名稱空間。
有關路由的一個重要說明:鏈接到應用程序中的另一個組件時,最好使用app.router/app-link函數,因為它將其掛在路由系統中。普通的HREF將起作用,但強制迫使頁面重新加載,該頁面將較慢,也可以重置應用程序。
除前端和後端外,還通過src/cljc/app中的.cljc文件包含了一些通用命名空間,這些命名空間允許通過前後共享關鍵數據和功能。其中最重要的是app.domain中的src/cljc/app/domain.cljc 。這為應用程序提供了常見的數據模式,包括配置文件的模式。
已經提供了一個Docker-compose.yml,以啟動基本的Postgres配置,其默認設置上面描述了一個簡單的docker-compose up 。
默認配置將在端口6809的前端打開NREPL連接,並在端口6502打開後端。
在開發模式下,在頁面上還添加了一個其他試劑-DEV-tools元素,可以反映當前的應用程序狀態。
提供了一個boot cljfmt任務,該任務將在SRC目錄中的所有文件上運行CLJFMT。從boot-cljfmt提供的check和fix任務也可以直接提供,可根據需要使用單個文件或目錄來運行。
前端和後端代碼均已配置為在文件更改上自動重新加載。一旦進行了重建,甚至還有一個有用的音頻提示通知您。
請注意,只有在某些文件更改時,完整的後端服務器系統才能完全重新啟動。這是通過build.boot dev任務配置的,其中:files參數到system步驟。
已經提供了一些基本的集成測試。您可以通過boot test或boot test-watch來運行這些,該測試將啟動觀察器並在文件更改時運行所有測試。
測試包括通過Etaoin進行的瀏覽器測試,您還需要安裝基於Firefox的geckowebdriver 。有關如何執行此操作的信息和鏈接可以在此處找到。在Mac上,它可以與brew install geckodriver ,在Ubuntu上安裝,並在Ubuntu上使用firefox-geckowebdriver或帶有scoop install geckodriver Windows上安裝。您當然還需要Chrome。
該應用程序最初基於系統模板,並提供了Tenzing的進一步指導。
由Annaia Danvers(@Jarcane)開發。 Futurice使發展成為可能。
版權(C)2018 Annaia Danvers。該代碼分佈在Eclipse公共許可證v2.0或任何後期版本下。有關更多信息,請參見根目錄中的LICENSE 。