¿Cómo agrego mis propias librerías de JavaScript a ClojureScript?
google-closure (2)
Quiero escribir una extensión de Google Chrome, usando ClojureScript. Con ClojureScript puedo usar todas las librerías de Google Closure, pero el acceso incorrecto al navegador Chrome no está incluido en esas librerías. Por lo tanto, quiero ajustar todo el contenido de Chrome en mi propia biblioteca de JavaScript.
Hasta ahora he intentado crear mi propio jar que tiene un único archivo JavaScript que solo crea un objeto Foo y exporta el constructor. He añadido este jar al directorio lib del compilador ClojureScript (que también tiene, por ejemplo, goog.jar), pero hasta ahora sin suerte:
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)
¿Alguien ha intentado esto antes?
Si recuerdo que Rich Hickeys habla correctamente, toda la optimización del programa del compilador de cierre necesita cualquier código de biblioteca para cumplir con ciertas convenciones de codificación. Creo que también dijo algo de que JQuery no hace esto, sino que Dojo hace esto. Nunca hice esto, pero es posible que encuentres información útil aquí
Eche un vistazo a esta publicación de Luke Vanderhart: "Uso de bibliotecas de JavaScript en ClojureScript"
http://lukevanderhart.com/2011/09/30/using-javascript-and-clojurescript.html
Además, este video de Kevin Lynagh: "Extensión de las bibliotecas de JavaScript de ClojureScript"