欢迎!请参阅关于页面,了解如何工作的更多信息。
如果你必须从头开始一个新的项目(Web 应用程序),选用什么栈?(后端,前端以及中间的一切)。
初始问题在这里提出: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世界 attempts with Apollo或Meteor,但在我看来Fulcro做出了更好的设计决策(选择Clojurescript是其中之一)。
[1] http://fulcro.fulcrologic.com/[2] https://juxt.pro/crux/index.html[3] https://github.com/souenzzo/graph-demo example with react native support
react native
我将使用RUM进行HTML模板和渲染,因为它提供了良好的服务器端渲染支持,可以稍后连接到React组件,或者简单地恢复到纯HTML,从而在Clojure和ClojureScript中工作。
如果需要更复杂的JS组件,我会在客户端使用ClojureScript和RUM与React一起使用。
我可能会尝试使用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