2024 Clojure 现状调查! 中分享你的想法。

欢迎!请阅读 关于 页面,了解更多关于这个平台的信息。

+11 投票

如果你必须从头开始一个新项目(网络应用)会如何?(当然是在 #Clojure 中)你将使用什么栈?(后端、前端和所有中间部分)。

最初的问题在这里提出: https://twitter.com/JacekSchae/status/1155852483270459392

7 个答案

+11 投票

编辑

fulcro3[1] + crux[2]

目前 fulcro3crux 都处于 alpha 版,所以它们是一个比标准 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 的示例

by
Fulcro3 仍然处于alpha版本,而Fulcro 2不是。后者已经存在多年,比re-frame风险更低
+3
by

我会使用 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客户端/服务器,这也是我喜欢的。

+2
by

reagent, re-frame, spec, bidi, ring, netty, aleph

+1

编辑了

我更新了我的回答,因为我添加了新功能。

我使用 hoplon 进行前端开发。使用 Chord 进行 RPC 与后端通信。通过 REST 接口连接到 CouchBD。

我有一个 300 行的 CLI 工具和基于 figwheel-main 的项目,这是我开始的。
https://github.com/rpompen/mkproj-demo

这是以下 shell 脚本生成的:
https://github.com/rpompen/mkproj

最初我会尽量保持简单。它提供了一个 CRUD 示例,针对 CouchDB 后端。

0

在前端,我已经开始尝试hx,并且真的很喜欢一些现代的 React API(尤其是 hooks)。对于状态管理,我一直喜欢re-frame,所以我最终开始了一个针对 hx 的移植工作(hx-frame - 非常初级的阶段,拥有大多数 re-frame API - 不支持订阅信号函数以及 re-frame 中存在的大量日志,所以至少是实验性质的)。在服务器端,我已经开始在 AWS 上试验一些新出现的无服务器模式。所以我的系统会是这个样子的,但肯定还没有完成实验阶段。

0

前端:Reagent+Reframe
后端:Pedestal
数据库:Datomic Cloud

0

我的当前项目使用以下技术

  • Fulcro 3
  • Pathom
  • Datomic
  • Pedestal
  • Lacinia
  • Deps.edn
  • Shadow-CLJS

服务器有两个图API端点
/api 是读写 EQL [1],由 Pathom 解析器处理
/grapqhl 是只读 GraphQL,由 Lacinia 解析器处理
这两个都是从单个 EDN 定义自动生成的。

虽然 Lacinia 在 Clojure 中使 GraphQL 容易,但我更喜欢通过与 Fulcro 和 Pathom 一起使用 EQL API。

[1] https://edn-query-language.org/eql/1.0.0/what-is-eql.html

...