我正在使用Clojure进行 Web开发,我注意到作者提供的ClojureScript示例使用常规的app-name.core
名称空间,该名称空间也被Clojure部分使用。 Luminus的许多样板代码的应用程序。
ClojureScript和Clojure通常分别用于评估应用程序的客户端和服务器端的相同代码,那么,如何区分ClojureScript核心名称空间和Clojure核心名称空间中的代码?是否使用目录结构?可以同时使用两个都不需要指定的代码吗?
答案 0 :(得分:0)
无论您的代码是在Node.js还是在浏览器中运行,都可以使用JavaScript进行编程。显然,取决于平台,API并不相同。
我的理解是ClojureScript只是一个编译器。您使用普通的Clojure(带有API的一个子集)编写代码,然后使用ClojureScript将Clojure编译为JavaScript。
因此,我认为名称空间的管理方式没有任何区别:
.
替换为/
clj
或cljs
-
替换为_
src
是根目录例如,app-name.core
“解析”为src/app_name/core.cljs
。
我认为(可能是错误的),在JVM上,如果磁盘上不存在文件,则编译器将查看JAR内部(如果有)。显然,使用ClojureScript不会发生这种情况。
答案 1 :(得分:0)
我在其他答案中说过恕我直言,在同一个git仓库中同时包含前端代码(CLJS)和后端代码(CLJ)是错误的。从根本上说,您有两个不同的程序,它们独立运行,在单独的硬件上并通过网络进行通信。这两个程序使用的所有公用程序都应放在单独的公用程序库中,这将是第三个存储库。
该组织为2(或3)个代码库提供了最大的独立性和清晰度,而与使用的语言无关。它同样适用于两个程序使用的任何语言组合:
因此,您将*.clj
文件用作后端代码,并将*.cljs
文件用作前端代码[1]。如果您有任何常用的实用程序,请进行第三个存储库,并将*.cljc
文件用于此共享库。
对于前端CLJS代码,恕我直言,使用新的figwheel-main
和Clojure Deps工具比使用旧的lein工具要容易得多。有关详细信息,请参见figwheel.org。这也使得将CLJ repl和CLJS repl分开保持更加容易(不需要“ piggieback”东西)。它还将CLJ编译和CLJS编译分开,这也简化了事情。
如上所述,希望您对原始问题的回答更加清楚。 CLJS代码可能具有名称空间demo.core
,该名称空间已编译为JavaScript,并在用户计算机上的浏览器中运行。 CLJ代码可能还具有命名空间demo.core
,该命名空间已编译为Java字节码,并在云中的后端服务器上运行。因此,每个执行环境中只有一个ns demo.core
,因此它们永远不会发生冲突。
因此,我们看到2个编译器将CLJ和CLJS代码库视为独立程序。这就是为什么恕我直言,使用两个不同的git存储库来防止混淆两个独立的代码库的原因。
脚注:
[1]。如果CLJS前端代码中包含宏,则由于CLJS编译器中的古怪之处,您还需要在*.clj
或*.cljc
文件中定义它们。在这里,我们将忽略这种复杂性。