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

时间:2019-09-04 15:08:46

标签: clojure clojurescript re-frame

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

任何lein模板附带的任何样板或代码都没有解释,这使它们对于初学者来说非常难使用。

谢谢。

enter image description here

2 个答案:

答案 0 :(得分:2)

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

对于ClojureScript而言,这根本没有关系。

构建Clojure后端时,通常会以“ uberjar”或“ uberwar”设置进行部署。这意味着所有源文件和依赖项都打包到一个.jar文件中(基本上只是一个zip文件)。通常,这是通过包括一组指定目录中的所有文件来完成的,因此它将包括src/clj但不包括src/cljs。如果所有内容都在一个目录中,则尽管Clojure后端从未使用过.cljs文件,但它们也会添加def change_doc(function): function.__doc__="my text" return function 文件。因此,从本质上讲,它只是使您的“超级jar包”更大。这不是一个重要的优化,但是有些人希望保持事物的整洁和清洁。

此外,一些开发人员只喜欢以这种方式分离代码。在这种情况下,模板作者就这样做了。

答案 1 :(得分:1)

一个答案:

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

另一个答案:

对于CLJS代码,必须在“较早的”编译阶段定义任何宏。因此,对于定义宏的命名空间,通常会看到util.cljutil.cljc之类的文件来定义宏,然后再看到util.cljs之类的文件,其中使用了宏。

您可以在下面找到更多信息,但这是微妙和令人困惑的: