Leiningen、Compojure、Luminus 和 Ring 是啥关系?

Posted

技术标签:

【中文标题】Leiningen、Compojure、Luminus 和 Ring 是啥关系?【英文标题】:What's the relationship between Leiningen, Compojure, Luminus and Ring?Leiningen、Compojure、Luminus 和 Ring 是什么关系? 【发布时间】:2014-02-06 19:47:53 【问题描述】:

我开始了 Clojure 的新学习阶段。我想构建一个 Web 应用程序,但我不知道该使用哪一个。我在网上搜索了几个小时,所有我发现的东西都相互重叠,我对此有点困惑。

我有 ASP.NET MVC 和 JavaEE 方面的经验,所以如果有什么将 Clojure Web 编程与这些经验联系起来,我很高兴听到。

Leiningen、Compojure、Luminus 和 Ring 是什么关系?

【问题讨论】:

【参考方案1】:

Leiningen 是一个构建工具。类似于 Java 世界中的 Maven(实际上,它在底层使用了 Maven)。您在 project.clj 中定义依赖项和配置,然后运行漂亮的 Leiningen 命令来下载依赖项、编译代码、运行应用程序等等。

Ring 是一个基本的网络框架。您可以将其与 JavaEE 中的 Servlet 进行比较。它提供了处理请求的基本功能,但不是非常高级或功能齐全。特别是,它需要您自己编写路由调度。

如果您不想弄乱路由,只需使用 Compojure。正如它在其GitHub page 中所述,“Compojure 是一个用于 Ring 的小型路由库,它允许 Web 应用程序由小的独立部分组成”。如果您需要与 Java 世界进行比较,我认为 Spring MVC 非常接近是类似的。

我以前没有听说过 Luminus,但它似乎正在尝试替换 Noir(现在已弃用)。 Luminus 和 Noir 都建立在 Ring 和 Compojure 之上,并进一步扩展了 Compojure 的功能。

【讨论】:

Luminus 没有扩展 Compojure 功能。 @Chiron:我猜你的意思是 Luminus 主要将其他库联系在一起(例如lib-noir),而不是自己添加新功能。如果您还有其他意思,请随时扩展答案。 Ring 实际上非常灵活 - 以至于所有其他网络工具都建立在它之上!它不是高级别的,也不是功能齐全的。 @amalloy:我刚刚意识到我使用“灵活”作为“功能齐全”的同义词(即开箱即用的灵活,而不是低级的,只有基本功能) ,这可能会误导其他用户。如果您不介意,我将使用您的措辞。【参考方案2】:

这些元素之间的差异已经得到很好的回答,因此我将尝试向您简要介绍一下我对像我这样具有 ASP.NET MVC 背景的人的 Clojure 替代方案的研究。我建议你去探索这对夫妇

Caribou

正如自己的页面所说:

Caribou 是一个动态的 Web 应用程序生态系统,用于以最小的努力打造可用于生产的 Web 居民。 Caribou 在日常需求的火焰中锻造而成,是 Web 开发人员每天面临的问题的解决方案集合。其开发背后的理念是解决我们遇到的每一个问题,以一种可以反复重用的通用方式。任何不必要的或阻碍的东西都因经常使用而被烧掉了。

我的简历:以某种“面向对象的方式”对数据结构进行建模的快速环境,其中您拥有模型和数据层。您会发现 .NET 更熟悉这一点,因为它提供了很多开箱即用的东西,甚至还有一个用于玩模型的 Web 界面。

Pedestal

Pedestal 是交互库的集合,它们共同创建了开发特定类型应用程序的途径。它使开发人员能够使用 Clojure 构建需要实时协作并针对多个平台的互联网应用程序。 简而言之:Pedestal 为在 Clojure 中构建富客户端 Web 应用程序提供了一种更好、更紧密的方式。 寻找构建互联网应用程序的标准方法的 Clojurists 会喜欢 Pedestal。他们现在可以塑造一个单一的、一致的形式来匹配他们的愿景,而不是用找到的物体来创作艺术。

我的简历:一种非常实用的 Web 应用程序开发方法,设计精良且功能强大,但绝对不熟悉或类似于 ASP.NET,真的值得回顾

有点跑题了,只是为了完成而提到Liberator,以防你想用 Clojure 实现 REST API。

【讨论】:

【参考方案3】:

Leiningen 是针对 Clojure 开发优化的构建工具。它主要与 Maven 存储库交互。例如,您可以从 project.clj 生成 pom.xml 文件

Ring 是用于 Web 应用程序开发的低级 API。例如,它使用映射数据结构来包装请求和响应。当然,它还提供处理程序、中间件和其他重要工件。

Compojure 提供了一个优雅的路由库。大多数时候,它与 Ring 一起使用。

Luminus 是许多 Clo​​jure 库的集合,可帮助您开始在 Clojure 中开发 Web 应用程序。

【讨论】:

以上是关于Leiningen、Compojure、Luminus 和 Ring 是啥关系?的主要内容,如果未能解决你的问题,请参考以下文章

Leiningen 安装

leiningen - 如何为本地 jar 添加依赖项?

安装 Leiningen 以与 Clojure 一起使用

Java 和 Clojure 与 Leiningen

在 Compojure 中组合路线

如何让 Leiningen 下载所需库的源代码?