可重复使用的ClojureScript库

时间:2014-12-03 14:05:57

标签: clojure package google-closure-compiler clojurescript

所以,我接受了我的大型Clojure项目并将其分成两部分。

我编写了核心部分并制作了Uberjar。

然后输入:

lein deploy clojars

将该jar公之于众,然后将其作为依赖项添加到我的应用程序的project.clj文件中。

此代码以cljx编写,因此可以编译为javascript。

我需要将两个cljx代码库分成两个独立的javascript库,而不是让整个ClojureScript虚拟机重复两次,需要采取哪些等效步骤?

更新:只是为了澄清一些事情。

1)我知道我可以转到.cljc而不是.cljx。我唯一担心的是这看起来很新,我不知道我的代码的现有用户是否可能拥有它。但我很快就会采取行动。关于cljc的答案也很受欢迎。

2)我已经成功将我的代码编译为单个的整体main.js文件。我正在寻找的是如何编译可以包含在其他cljs项目中的单独的clj库。每当我目前在cljs中编译一些内容时,我会得到一个包含整个clojurescript VM的main.js文件。

3)我回到这个问题的动机之一就是我想开始使用Figwheel。所以我希望能够在clojurescript中创建库,我可以将其放入我正在通过Figwheel开发的新clojurescript项目中。所以我想我会在这个新项目的project.clj文件中引用它们,并将它们作为已编译的.js文件包含在网页中。我错了吗?

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

如果没有关于project.clj的更多详细信息,很难说出配置中的错误或遗漏,但我会尝试覆盖您应该覆盖的最重要的部分看看。

不要使用cljx。使用Reader Conditionals!

如今, cljx is deprecated赞成Reader Conditionals(cljc)。如果你有机会升级到clojure 1.7.0,那么我的建议是这样做并且让cljx落后:你将避免cljx的大部分问题,因为它不是使用构建工具(需要与构建管道的其余部分同步)cljc是clojure编译器所知道的。

如果您仍然要使用cljx ...

我不会重复优秀README from cljx所涵盖的所有内容,只是查明一些相关部分:

  1. 您必须确保在管道中的其他任务(cljx oncejavaccompile甚至uberjar之前调用testcljsbuild test)。因此,您可能需要创建aliases或修改:prep-tasks中的默认project.clj。更多信息:请参阅the Installation section

  2. 您的cljx :output-path应添加到您的cljsbuild :source-paths。请参阅the Usage section

  3. 最后但并非最不重要:

    1. 使用cljsbuild时,不要在依赖关系向量中将依赖项声明为:classifier "aot"。只有在您知道自己在做什么时才使用它。如果您有依赖性问题,请在开发期间删除它。无论您使用的是cljx,cljc还是普通的cljs,这都适用。

    2. 看看其他项目的cljx配置。例如:Prismatic/schema"Switch to reader conditionals" commit in Sablono