欢迎!请在关于 页面获取更多关于该功能的信息。
如果你必须从头开始一个新的项目(Web 应用程序),(自然地,在 #Clojure)你的堆栈会是什么?(后端、前端以及所有中间部分)。
这个问题最初在这里提出: https://twitter.com/JacekSchae/status/1155852483270459392
fulcro3[1] + crux[2]
fulcro3
crux
这两个工具目前都是 alpha 版本,所以相比于标准的 re-frame + postgres 应用程序,这绝对是一个有风险的选项,但我非常喜欢它们背后的雄心壮志。
re-frame
postgres
它基本上是一个数据驱动的、时间旅行支持的 CQRS 全堆栈,一旦这项技术成熟,它承诺将提供前所未有的生产力。
Fulcro 是最初吸引我进入 Clojure 的东西。在除 ClojureScript 以外的任何语言中构建它都将是极其困难的——JS 世界尝试过 Apollo 或 Meteor,但在我看来,Fulcro 做出更好的设计决策(选择 Clojurescript 仅是其中之一)。
[1] http://fulcro.fulcrologic.com/[2] https://juxt.pro/crux/index.html[3] https://github.com/souenzzo/graph-demo 示例,支持 react native
react native
我会使用RUM进行HTML模板和渲染,因为它对服务器端渲染有良好的支持,可以后来连接到React组件,或简单地回退到普通HTML,因此可以在Clojure和ClojureScript中工作。
如果需要在客户端使用更复杂的JS组件,我会选用React配合ClojureScript和RUM。
我会尝试使用Datomic Cloud用于服务器端持久化状态,以及Datascript用于客户端临时状态。
我可能还会尝试使用reitit进行路由,以及http-kit作为我的HTML客户端/服务器。觉得reitit的速度可能值得考虑,它现在支持ring和pedestal,并且对Clojure Spec的使用有良好的支持。http-kit为我提供了一个只使用Clojure的HTML客户端/服务器,我很喜欢。
reagent, re-frame, spec, bidi, ring, netty, aleph
我更新了我的回答,因为我添加了功能。
我在前端使用hoplon。使用Chord进行RPC后端通信。通过REST接口连接到CouchBD。
我有一个基于figwheel-main的300行CLI工具和项目,这是我开始的地方 https://github.com/rpompen/mkproj-demo
它是以下shell脚本生成的 https://github.com/rpompen/mkproj
我开始时尽量简单化。它提供了一个CRUD示例到CouchDB后端。
在前端,我一直在尝试使用hx,并对一些现代的react API(尤其是hooks)感到非常满意。对于状态管理,我总是喜欢使用re-frame,所以我最终开始移植了一个与hx兼容的版本(hx-frame - 处于非常早期的阶段,拥有大部分re-frame API - 不支持订阅信号函数以及re-frame中存在的大量日志记录,所以最多可以说是一个实验)。在服务器端,我一直在尝试AWS和新兴的无服务器模式。所以这大致是我的样子,但它确实还没有完全走出实验阶段。
前端:Reagent+Reframe后端:Pedestal数据库:Datomic Cloud
我在当前项目中使用
服务器有两个图形API端点 /api是读写EQL [1],由Pathom解析器处理 /grapqhl是只读GraphQL,由Lacinia解析器处理这两个都是从一个单一的EDN定义自动生成的。
/api
/grapqhl
Lacinia在使Clojure中的GraphQL变得简单方面非常出色,但我更喜欢通过与Fulcro和Pathom使用EQL API。
[1] https://edn-query-language.org/eql/1.0.0/what-is-eql.html