2017-08-25 2 views
1

J'ai suivi la première partie de https://clojurescript.org/guides/javascript-modules et la partie où j'exécute lein trampoline run -m clojure.main watch.clj montre cePourquoi l'exemple de guide javascript-modules ne fonctionne-t-il pas?

Building ... 
WARNING: JavaScript file found on classpath for library `js.hello`, but does not contain a corresponding `goog.provide` declaration: file:/Users/kcase/projects/hello-es6/src/js/hello.js 
Copying jar:file:/Users/kcase/.m2/repository/org/clojure/clojurescript/1.9.854/clojurescript-1.9.854.jar!/cljs/core.cljs to out/cljs/core.cljs 
Reading analysis cache for jar:file:/Users/kcase/.m2/repository/org/clojure/clojurescript/1.9.854/clojurescript-1.9.854.jar!/cljs/core.cljs 
Compiling out/cljs/core.cljs 
Using cached cljs.core out/cljs/core.cljs 
Copying jar:file:/Users/kcase/.m2/repository/org/clojure/clojurescript/1.9.854/clojurescript-1.9.854.jar!/cljs/nodejs.cljs to out/cljs/nodejs.cljs 
Compiling out/cljs/nodejs.cljs 
Compiling src/hello_es6/core.cljs 
WARNING: JavaScript file found on classpath for library `js.hello`, but does not contain a corresponding `goog.provide` declaration: file:/Users/kcase/projects/hello-es6/src/js/hello.js 
clojure.lang.ExceptionInfo: failed compiling file:src/hello_es6/core.cljs {:file #object[java.io.File 0x14ecd835 "src/hello_es6/core.cljs"]} 
    at clojure.core$ex_info.invokeStatic(core.clj:4725) 
    at clojure.core$ex_info.invoke(core.clj:4725) 
    at cljs.compiler$compile_file$fn__4440.invoke(compiler.cljc:1521) 
    at cljs.compiler$compile_file.invokeStatic(compiler.cljc:1482) 
    at cljs.compiler$compile_file.invoke(compiler.cljc:1458) 
    at cljs.closure$compile_file.invokeStatic(closure.clj:533) 
    at cljs.closure$compile_file.invoke(closure.clj:524) 
    at cljs.closure$eval6681$fn__6682.invoke(closure.clj:602) 
    at cljs.closure$eval6617$fn__6618$G__6606__6625.invoke(closure.clj:486) 
    at cljs.closure$compile_sources$iter__6805__6809$fn__6810.invoke(closure.clj:947) 
    at clojure.lang.LazySeq.sval(LazySeq.java:40) 
    at clojure.lang.LazySeq.seq(LazySeq.java:49) 
    at clojure.lang.Cons.next(Cons.java:39) 
    at clojure.lang.RT.next(RT.java:703) 
    at clojure.core$next__6406.invokeStatic(core.clj:64) 
    at clojure.core$dorun.invokeStatic(core.clj:3115) 
    at clojure.core$doall.invokeStatic(core.clj:3121) 
    at clojure.core$doall.invoke(core.clj:3121) 
    at cljs.closure$compile_sources.invokeStatic(closure.clj:943) 
    at cljs.closure$compile_sources.invoke(closure.clj:932) 
    at cljs.closure$build.invokeStatic(closure.clj:2528) 
    at cljs.closure$build.invoke(closure.clj:2444) 
    at cljs.closure$watch$buildf__7486.invoke(closure.clj:2647) 
    at cljs.closure$watch.invokeStatic(closure.clj:2679) 
    at cljs.closure$watch.invoke(closure.clj:2623) 
    at cljs.build.api$watch.invokeStatic(api.clj:219) 
    at cljs.build.api$watch.invoke(api.clj:207) 
    at cljs.build.api$watch.invokeStatic(api.clj:216) 
    at cljs.build.api$watch.invoke(api.clj:207) 
    at cljs.build.api$watch.invokeStatic(api.clj:210) 
    at cljs.build.api$watch.invoke(api.clj:207) 
    at user$eval7609.invokeStatic(watch.clj:3) 
    at user$eval7609.invoke(watch.clj:3) 
    at clojure.lang.Compiler.eval(Compiler.java:6978) 
    at clojure.lang.Compiler.load(Compiler.java:7430) 
    at clojure.lang.Compiler.loadFile(Compiler.java:7368) 
    at clojure.main$load_script.invokeStatic(main.clj:277) 
    at clojure.main$script_opt.invokeStatic(main.clj:337) 
    at clojure.main$script_opt.invoke(main.clj:332) 
    at clojure.main$main.invokeStatic(main.clj:423) 
    at clojure.main$main.doInvoke(main.clj:386) 
    at clojure.lang.RestFn.applyTo(RestFn.java:137) 
    at clojure.lang.Var.applyTo(Var.java:700) 
    at clojure.main.main(main.java:37) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93) 
    at clojure.lang.Reflector.invokeStaticMethod(Reflector.java:207) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93) 
    at clojure.lang.Reflector.invokeStaticMethod(Reflector.java:207) 
    at user$eval15.invokeStatic(form-init5230861038763741865.clj:1) 
    at user$eval15.invoke(form-init5230861038763741865.clj:1) 
    at clojure.lang.Compiler.eval(Compiler.java:6978) 
    at clojure.lang.Compiler.eval(Compiler.java:6968) 
    at clojure.lang.Compiler.load(Compiler.java:7430) 
    at clojure.lang.Compiler.loadFile(Compiler.java:7368) 
    at clojure.main$load_script.invokeStatic(main.clj:277) 
    at clojure.main$init_opt.invokeStatic(main.clj:279) 
    at clojure.main$init_opt.invoke(main.clj:279) 
    at clojure.main$initialize.invokeStatic(main.clj:310) 
    at clojure.main$null_opt.invokeStatic(main.clj:344) 
    at clojure.main$null_opt.invoke(main.clj:341) 
    at clojure.main$main.invokeStatic(main.clj:423) 
    at clojure.main$main.doInvoke(main.clj:386) 
    at clojure.lang.RestFn.applyTo(RestFn.java:137) 
    at clojure.lang.Var.applyTo(Var.java:700) 
    at clojure.main.main(main.java:37) 
Caused by: clojure.lang.ExceptionInfo: No such namespace: js.hello, could not locate js/hello.cljs, js/hello.cljc, or JavaScript source providing "js.hello" in file src/hello_es6/core.cljs {:tag :cljs/analysis-error} 
    at clojure.core$ex_info.invokeStatic(core.clj:4725) 
    at clojure.core$ex_info.invoke(core.clj:4725) 
    at cljs.analyzer$error.invokeStatic(analyzer.cljc:694) 
    at cljs.analyzer$error.invoke(analyzer.cljc:690) 
    at cljs.analyzer$error.invokeStatic(analyzer.cljc:692) 
    at cljs.analyzer$error.invoke(analyzer.cljc:690) 
    at cljs.analyzer$analyze_deps.invokeStatic(analyzer.cljc:2111) 
    at cljs.analyzer$analyze_deps.invoke(analyzer.cljc:2085) 
    at cljs.analyzer$ns_side_effects.invokeStatic(analyzer.cljc:3430) 
    at cljs.analyzer$ns_side_effects.invoke(analyzer.cljc:3425) 
    at cljs.analyzer$analyze_STAR_$fn__3152.invoke(analyzer.cljc:3547) 
    at clojure.lang.PersistentVector.reduce(PersistentVector.java:341) 
    at clojure.core$reduce.invokeStatic(core.clj:6703) 
    at clojure.core$reduce.invoke(core.clj:6686) 
    at cljs.analyzer$analyze_STAR_.invokeStatic(analyzer.cljc:3547) 
    at cljs.analyzer$analyze_STAR_.invoke(analyzer.cljc:3537) 
    at cljs.analyzer$analyze.invokeStatic(analyzer.cljc:3571) 
    at cljs.analyzer$analyze.invoke(analyzer.cljc:3554) 
    at cljs.compiler$emit_source.invokeStatic(compiler.cljc:1340) 
    at cljs.compiler$emit_source.invoke(compiler.cljc:1319) 
    at cljs.compiler$compile_file_STAR_$fn__4409.invoke(compiler.cljc:1425) 
    at cljs.compiler$with_core_cljs.invokeStatic(compiler.cljc:1226) 
    at cljs.compiler$with_core_cljs.invoke(compiler.cljc:1215) 
    at cljs.compiler$compile_file_STAR_.invokeStatic(compiler.cljc:1410) 
    at cljs.compiler$compile_file_STAR_.invoke(compiler.cljc:1403) 
    at cljs.compiler$compile_file$fn__4440.invoke(compiler.cljc:1507) 
    ... 70 more 

On dirait qu'il se plaint que l'espace de noms js.hello n'a pas été créé par goog.provide(). J'attends le compilateur ClojureScript de le faire puisque le guide dit

fichiers JavaScript ne déclarent pas les espaces de noms, de sorte que le compilateur ClojureScript calcule une fonction de l'emplacement de l'entrée.

Ai-je raté quelque chose?

+0

Le code semble essayer de lire/trouver/analyser les espaces de noms Google Closure à partir du fichier 'hello-es6/src/js/hello.js'. Cela n'a aucun sens pour moi puisque l'objectif principal est de pouvoir utiliser JavaScript qui n'a pas été écrit pour le compilateur Google Closure. – kevincasey

Répondre

1

Je pense que tout tourne autour de la version CLJS.

Essayez ceci:

project.clj

(defproject hello-es6 "0.1.0-SNAPSHOT" 
    :dependencies [[org.clojure/clojure "1.9.0-alpha14"] 
       [org.clojure/clojurescript "1.9.908"]] 
    :jvm-opts ^:replace ["-Xmx1g" "-server"]) 

watch.clj

(require '[cljs.build.api :as b]) 

(b/watch "src" 
    {:output-to "main.js" 
    :output-dir "out" 
    :main   'hello-es6.core 
    :optimizations :advanced 
    :target  :nodejs 
    :foreign-libs [{:file "src" 
        :module-type :es6}] ;; or :commonjs/:amd 
    :verbose  true}) 

Optimisations doivent être : avancé

Je pense que cela vous aide à exécuter un exemple à partir de Guide.

+0

Oui, la version présentée dans le guide, '[org.clojure/clojurescript" 1.9.854 "]', ne fonctionne pas. Je n'ai pas eu besoin d'ajouter une clé ': optimizations' pour le faire fonctionner, mais c'est génial que ça fonctionne quand il est optimisé. Merci! – kevincasey