2011-08-05 12 views
11

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.¿Cómo agrego mis propias librerías de JavaScript a ClojureScript?

Hasta ahora he intentado crear mi propio jar que tiene un único archivo JavaScript que solo crea un objeto Foo y exporta el constructor. I'v añade este frasco en el 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) 

nadie intentó esto antes?

Respuesta

5

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 usted podría encontrar alguna información útil here

+1

Si ese es el único problema, que aún debe ser capaz de utilizar estas bibliotecas con adoquín menor optimización ings. Intentará –

+0

El Jquery-wrapper jayq https://github.com/ibdknox/jayq elabora esto. Sin embargo, el compilador de cierre hace que el código sea más eficiente, tener libs externos será más lento. – claj

Cuestiones relacionadas