我正在尝试使用lein-cljsbuild编译一些JS库,以便将它们集成到我们的ClojureScript代码库中。首先,我在每个文件的顶部添加了一些goog.provide,这些文件根据它们的名称空间在目录树中进行分层组织(就像在Java中一样)。也就是说,名称空间a.b.c位于src-js/libs/a/b/c.js中
我已经将JS文件放在项目的根目录src-js/libs中,并且我有以下内容:lein-cljsbuild的编译器选项:
{:id "prod",
:source-paths ["src-cljs" "src-js"]
:compiler
{:pretty-print false,
:libs ["libs/"]
:output-to "resources/public/js/compiled-app.js",
:optimizations :simple}}所有JS文件都不会编译到已编译的应用程序文件中。怎么了?
我还尝试将它们放在resources/closure js/libs中,但没有成功。
我使用lein-cljsbuild 0.3.0。
发布于 2013-03-26 02:47:27
首先,与某些文本中的建议不同,您不需要在project.clj的任何类路径配置语句中包含您的私有闭包库位置。因此,除非“source-path:”语句中包含的"src/js“目录有其他用途,否则可以将其删除。
其次,为了引入私有闭包代码,唯一要添加到project.clj中的是您所做的"libs:“引用;但与您输入的引用不同,该引用必须是对特定*.js文件(或多个文件)的引用,而不仅仅是目录。因此,如果您想要使用的库在一个名为test.js的文件中,并且该文件位于/src/js目录中,那么libs: entry应该是:"src/js/test.js“。如果您想使用该插件的默认选项:libs directory,请参阅cljs-build发行说明。
第三,(看起来你已经知道了这一点,但这就是让我绊倒的原因)如果你正在使用浏览器支持的REPL ( cljsbuild的REPL -listen选项),你仍然不能从那个REPL加载/引用/使用你的私有库资产,除非你在你的编译-app.js的源代码中包含一个:require语句(例如"(ns must (:require myprivatelib))“),那么你必须重新编译(lein cljsbuild一次)并重新加载你的浏览器页面,并使用一个到编译-app.js的链接。这就引入了代码库。否则,您的浏览器REPL将继续坚持闭包库中提供的名称空间未定义。
我希望这能帮到你。
https://stackoverflow.com/questions/15387269
复制相似问题