
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 。