欢迎!请查看关于页面以获取更多关于如何使用本站的信息。
如果你必须从头开始(web-app)一个新的项目(当然在 #Clojure)你的栈是什么?(后端,前端以及所有中间部分)。
初始问题在这里提出:https://twitter.com/JacekSchae/status/1155852483270459392
fulcro3[1] + crux[2]
fulcro3
crux
fulcro3和crux目前都处于alpha版本,所以这个选择肯定比标准的re-frame + postgres应用风险更大,但我非常喜欢它们背后的宏伟理念。
re-frame
postgres
它基本上是一个数据驱动、时间旅行启用的CQRS全栈,一旦这项技术成熟,就有可能带来前所未有的生产力。
Fulcro是我最初被Clojure吸引的原因。在其它任何语言中构建它都极其困难 - 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中工作。
如果需要,我会在客户端使用React with ClojureScript 和 RUM来实现更复杂的JS组件。
我尝试使用Datomic Cloud作为我的服务器端持久状态,以及Datascript作为我的客户端临时状态。
我认为我会在reitit中进行路由,并使用http-kit作为我的HTML客户端/服务器。感觉reitit的速度可能物有所值,现在它还支持ring和pedestal,并且使用Clojure Spec提供了良好的Swift volatile支持。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
为了开始,我尽量使事物尽可能简单。它提供了一个访问CouchDB后端的CRUD示例。
在前端,我一直在实验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