Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 为什么我的lein re框架模板中有clj和cljs文件夹?_Clojure_Clojurescript_Re Frame - Fatal编程技术网

Clojure 为什么我的lein re框架模板中有clj和cljs文件夹?

Clojure 为什么我的lein re框架模板中有clj和cljs文件夹?,clojure,clojurescript,re-frame,Clojure,Clojurescript,Re Frame,为什么我的lein re框架模板中有clj和cljs文件夹,如下所示?为什么它们都包含名为.core的文件,这些文件似乎使用相同的名称空间?我被告知这是学习重新构建框架时的起点,但我找不到任何解释来解释模板的设置方式或创建方式,包括模板包含的内容 没有解释任何lein模板附带的任何样板文件或代码,这使得初学者很难使用它们 提前谢谢 一个答案: 正如评论所指出的,一些项目在同一个项目repo中开发后端代码(Clojure)和前端代码(ClojureScript)。我认为这是一个错误,因为它很容易导

为什么我的lein re框架模板中有clj和cljs文件夹,如下所示?为什么它们都包含名为
.core
的文件,这些文件似乎使用相同的名称空间?我被告知这是学习重新构建框架时的起点,但我找不到任何解释来解释模板的设置方式或创建方式,包括模板包含的内容

没有解释任何lein模板附带的任何样板文件或代码,这使得初学者很难使用它们

提前谢谢


一个答案:

正如评论所指出的,一些项目在同一个项目repo中开发后端代码(Clojure)和前端代码(ClojureScript)。我认为这是一个错误,因为它很容易导致混乱和纠缠(特别是如果使用lein同时启动两个项目)。IMHO最好将前端和后端部件都保存在单独的存储库中。我还强烈建议在CLJS代码中使用figwheel main和Clojure deps构建工具

另一个答案:

对于CLJS代码,任何宏都必须在“早期”编译阶段定义。因此,对于定义宏的名称空间,您经常会看到像
util.clj
util.cljc
这样的文件来定义宏,然后是像
util.cljs
这样的文件来使用宏

您可以在下面找到更多信息,但这些信息很微妙且令人困惑:


此设置用于将Clojure后端代码与ClojureScript前端分离。实际上这并没有必要,我也不特别推荐它,但我可以解释它的历史以及你为什么要这么做

对于ClojureScript来说,这真的一点都不重要

在构建Clojure后端时,您通常会在一些“uberjar”或“uberwar”设置中部署。这意味着所有源文件和依赖项都打包到一个
.jar
文件中(基本上只是一个zip文件)。这通常是通过包含一组指定目录中的所有文件来完成的,因此它将包括
src/clj
,但不包括
src/cljs
。如果所有内容都在一个目录中,那么它也会添加
.cljs
文件,尽管Clojure后端从未使用过这些文件。所以本质上它只是让你的“uberjar”更大。这不是一个重要的优化,但有些人更喜欢保持精简和干净


此外,一些开发人员更喜欢用这种方式分离代码。在本例中,模板作者这样做了。

它假定您正在使用clojure作为后端。如果您仅将clojurescript与其他后端一起使用(或者将您的后端放在另一个repo中),则可以删除该目录。通常还有一个cljc目录,用于存放clojurescript和clojure都可以使用的文件。另外,如果您刚刚开始,我强烈建议您使用试剂或朗姆酒,而不是再混合或om。后两种方法实际上是面向具有复杂数据管理的大型SPA。试剂功能不太强大,但更容易开始使用。谢谢,我非常熟悉使用redux的大型javascript应用程序,由于复杂的工具和精简的基础文档,我正努力进入ClojureScript的世界!好啊只知道两件事:1。reframe为状态和数据管理实现了自己的发布/订阅体系结构。就这类事情而言,它是相当标准的,但不一定是您习惯于react/redux的。2.文档和工具实际上相当不错,除了(上次我检查)它通常面向Clojure开发人员,而不是Javascript开发人员(这是一个公认的问题)!谢谢我懂了。现在有道理了。