11

我想使用 ClojureScript 编写一个 Google Chrome 扩展。使用 ClojureScript,我可以使用所有 Google Closure 库,但这些库中不包含对 Chrome 浏览器的 afaik 访问。所以我想把所有 Chrome 的东西都包装在我自己的 JavaScript 库中。

到目前为止,我尝试创建自己的 jar,它有一个 JavaScript 文件,它只创建一个 Foo 对象并导出构造函数。我已将此 jar 添加到 ClojureScript 编译器的 lib 目录中(例如 goog.jar),但到目前为止没有运气:

Exception in thread "main" java.lang.IllegalArgumentException: No implementation of method: :-compile of protocol: #'cljs.closure/Compilable found for class: nil
at clojure.core$_cache_protocol_fn.invoke(core_deftype.clj:494)
at cljs.closure$eval1056$fn__1057$G__1047__1064.invoke(closure.clj:187)
at cljs.closure$get_compiled_cljs.invoke(closure.clj:422)
at cljs.closure$cljs_dependencies.invoke(closure.clj:440)
at cljs.closure$add_dependencies.doInvoke(closure.clj:462)
at clojure.lang.RestFn.applyTo(RestFn.java:139)
at clojure.core$apply.invoke(core.clj:602)
at cljs.closure$build.invoke(closure.clj:701)
at user$eval1246.invoke(cljsc.clj:21)
at clojure.lang.Compiler.eval(Compiler.java:6406)
at clojure.lang.Compiler.load(Compiler.java:6843)
at clojure.lang.Compiler.loadFile(Compiler.java:6804)
at clojure.main$load_script.invoke(main.clj:282)
at clojure.main$script_opt.invoke(main.clj:342)
at clojure.main$main.doInvoke(main.clj:426)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:405)
at clojure.lang.AFn.applyToHelper(AFn.java:163)
at clojure.lang.Var.applyTo(Var.java:518)
at clojure.main.main(main.java:37)

有没有人试过这个?

4

2 回答 2

8

看看 Luke Vanderhart 的这篇文章:“在 ClojureScript 中使用 JavaScript 库”

http://lukevanderhart.com/2011/09/30/using-javascript-and-clojurescript.html

另外,这个视频来自 Kevin Lynagh:“Extending JavaScript Libraries from ClojureScript”

http://www.youtube.com/watch?v=XfzXFWTT-z0

于 2012-11-09T20:28:34.983 回答
5

如果我记得 Rich Hickeys 说得对,闭包编译器的整个程序优化需要任何库代码来遵守某些编码约定。我认为他也说过 JQuery 不这样做,但 Dojo 这样做。我从来没有这样做过,但你可能会在这里找到一些有用的信息

于 2011-08-07T15:21:48.373 回答