使用ClojureScript中的Cljsbuild编译外部JS文件

时间:2013-03-13 13:51:56

标签: leiningen clojurescript cljsbuild

我正在尝试使用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。

1 个答案:

答案 0 :(得分:4)

首先,与某些文本中建议的不同,您不需要在project.clj中的任何类路径配置语句中包含您的私有闭包库位置。因此,除非“source-paths:”语句中包含的“src / js”目录用于其他目的,否则可以将其删除。

其次,为了引入你的私有闭包代码,唯一要添加到project.clj的是你所做的“libs:”引用;但与您输入的内容不同,该引用必须是特定的* .js文件(或文件)而不仅仅是目录。因此,如果您要使用的库位于名为test.js的文件中并且位于/ src / js目录中,则您的libs:条目将为:“src / js / test.js”。如果要使用该插件的default:libs目录选项,请参阅cljs-build发行说明。

第三,(看起来你已经知道了,但这就是让我失望的事)如果你使用的是浏览器支持的REPL(cljsbuild的repl-listen选项),你仍然无法加载/引用/使用来自该REPL的私有库资源,直到你在compile-app.js的源代码中包含:require语句(例如“(ns testing(:require [myprivatelib]))”),然后你必须重新编译(lein cljsbuild一次)并使用指向compiled-app.js的链接重新加载浏览器页面。这带来了代码库。否则,您的浏览器REPL将继续坚持未定义闭包库中提供的命名空间。

我希望这会有所帮助。