欢迎!请查看关于页面,了解更多关于这个网站的信息。
如果你必须从头开始一个新的项目(Web应用),你会选择什么栈?(后端,前端,以及中间的一切)。
最初的问题在这里被提出:https://twitter.com/JacekSchae/status/1155852483270459392
fulcro3[1] + crux[2]
fulcro3
crux
目前,《code>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的示例
我会使用RUM进行HTML模板和渲染,因为它支持良好的服务器端渲染,可以稍后与React组件连接,或者简单地回到纯HTML,从而在Clojure和ClojureScript中工作。
如果需要,我会使用ClojureScript和RUM在客户端使用React进行更复杂的JS组件。
我可能尝试使用Datomic Cloud作为我的服务器端持久状态和Datascript作为我的客户端临时状态。
我觉得我可以试试reitit进行路由和http-kit作为我的HTML客户端/服务器。感觉reitit的速度可能值得,它现在也支持ring和pedestal,还有很好的Clojure Spec支持Swagger。http-kit给我了一个只有Clojure的HTML客户端/服务器,我很喜欢。
reagent, re-frame, spec, bidi, ring, netty, aleph
我更新了我的回答,因为我增加了功能。
我在前端使用hoplon,使用Chord进行RPC后端通信。通过REST接口连接到CouchDB。
我有一个基于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