所以,我接受了我的大型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文件包含在网页中。我错了吗?
答案 0 :(得分:2)
您是否尝试过Leiningen的结帐依赖功能?
https://github.com/technomancy/leiningen/blob/stable/doc/TUTORIAL.md#checkout-dependencies
答案 1 :(得分:2)
如果没有关于project.clj
的更多详细信息,很难说出配置中的错误或遗漏,但我会尝试覆盖您应该覆盖的最重要的部分看看。
如今, cljx is deprecated赞成Reader Conditionals(cljc)。如果你有机会升级到clojure 1.7.0,那么我的建议是这样做并且让cljx落后:你将避免cljx的大部分问题,因为它不是使用构建工具(需要与构建管道的其余部分同步)cljc是clojure编译器所知道的。
我不会重复优秀README from cljx所涵盖的所有内容,只是查明一些相关部分:
您必须确保在管道中的其他任务(cljx once
,javac
,compile
甚至uberjar
之前调用test
或cljsbuild test
)。因此,您可能需要创建aliases
或修改:prep-tasks
中的默认project.clj
。更多信息:请参阅the Installation section
您的cljx :output-path
应添加到您的cljsbuild :source-paths
。请参阅the Usage section
最后但并非最不重要:
使用cljsbuild时,不要在依赖关系向量中将依赖项声明为:classifier "aot"
。只有在您知道自己在做什么时才使用它。如果您有依赖性问题,请在开发期间删除它。无论您使用的是cljx,cljc还是普通的cljs,这都适用。
看看其他项目的cljx配置。例如:Prismatic/schema和"Switch to reader conditionals" commit in Sablono