为什么clojurescript浏览器repl无法加载某些名称空间?
我写了一些测试,我发现: repl中只能需要作为已编译clojurescript依赖项的名称空间。 repl中不需要任何已编译clojurescript未引用的命名空间 这是为什么clojurescript浏览器repl无法加载某些名称空间?,clojure,require,clojurescript,read-eval-print-loop,Clojure,Require,Clojurescript,Read Eval Print Loop,我写了一些测试,我发现: repl中只能需要作为已编译clojurescript依赖项的名称空间。 repl中不需要任何已编译clojurescript未引用的命名空间 这是REPL的限制吗?还是这里出了什么问题 当我需要未被任何编译的clojurescript引用的名称空间时,我得到了错误: cljs.user> (require 'cljsjs.d3) 711cljs.core._STAR_print_namespace_maps_STAR_ = true
REPL
的限制吗?还是这里出了什么问题
当我需要未被任何编译的clojurescript引用的名称空间时,我得到了错误:
cljs.user> (require 'cljsjs.d3)
711cljs.core._STAR_print_namespace_maps_STAR_ = true
712Loading: (goog)
713Loading: (cljsjs.d3)
714goog.addDependency("base.js", [], []);
715goog.addDependency("../cljsjs/d3/development/d3.inc.js", [], []);
716
717goog.require('cljsjs.d3');
718null;
719
720"Error evaluating:" (require (quote cljsjs.d3)) :as "goog.require('cljsjs.d3');\nnull;\n"
721Error: goog.require could not find: cljsjs.d3
722Failed to canonicalize stacktrace
723clojure.lang.ExceptionInfo: Could not relativize URL http://192.168.124.5:9000/goog/base.js {:type :parse-stacktrace, :reason :relativize-url}
724 at clojure.core$ex_info.invokeStatic(core.clj:4617)
725 at clojure.core$ex_info.invoke(core.clj:4617)
726 at cljs.stacktrace$parse_file.invokeStatic(stacktrace.cljc:104)
727 at cljs.stacktrace$parse_file.invoke(stacktrace.cljc:81)
728 at cljs.stacktrace$chrome_st_el__GT_frame.invokeStatic(stacktrace.cljc:121)
729 at cljs.stacktrace$chrome_st_el__GT_frame.invoke(stacktrace.cljc:111)
730 at cljs.stacktrace$eval9220$fn__9221$fn__9222.invoke(stacktrace.cljc:142)
731 at clojure.core$map$fn__4785.invoke(core.clj:2646)
732 at clojure.lang.LazySeq.sval(LazySeq.java:40)
733 at clojure.lang.LazySeq.seq(LazySeq.java:49)
734 at clojure.lang.RT.seq(RT.java:521)
735 at clojure.core$seq__4357.invokeStatic(core.clj:137)
736 at clojure.core$filter$fn__4812.invoke(core.clj:2700)
737 at clojure.lang.LazySeq.sval(LazySeq.java:40)
738 at clojure.lang.LazySeq.seq(LazySeq.java:49)
739 at clojure.lang.RT.seq(RT.java:521)
740 at clojure.lang.LazilyPersistentVector.create(LazilyPersistentVector.java:44)
741 at clojure.core$vec.invokeStatic(core.clj:377)
742 at clojure.core$vec.invoke(core.clj:367)
743 at cljs.stacktrace$eval9220$fn__9221.invoke(stacktrace.cljc:138)
744 at clojure.lang.MultiFn.invoke(MultiFn.java:243)
745 at cljs.repl.browser.BrowserEnv._parse_stacktrace(browser.clj:281)
746 at cemerick.piggieback$fn__9491.invokeStatic(piggieback.clj:100)
747 at cemerick.piggieback$fn__9491.invoke(piggieback.clj:99)
748 at cljs.repl$eval8750$fn__8751$G__8741__8762.invoke(repl.cljc:147)
749 at cljs.repl$display_error$fn__8901.invoke(repl.cljc:440)
750 at cljs.repl$display_error.invokeStatic(repl.cljc:439)
751 at cljs.repl$display_error.invoke(repl.cljc:428)
752 at cljs.repl$repl_caught.invokeStatic(repl.cljc:753)
753 at cljs.repl$repl_caught.invoke(repl.cljc:744)
754 at cemerick.piggieback$run_cljs_repl$fn__9524.invoke(piggieback.clj:206)
755 at cljs.repl$repl_STAR_$fn__9046$fn__9055.invoke(repl.cljc:927)
756 at cljs.repl$repl_STAR_$fn__9046.invoke(repl.cljc:924)
757 at cljs.compiler$with_core_cljs.invokeStatic(compiler.cljc:1271)
758 at cljs.compiler$with_core_cljs.invoke(compiler.cljc:1260)
759 at cljs.repl$repl_STAR_.invokeStatic(repl.cljc:888)
760 at cljs.repl$repl_STAR_.invoke(repl.cljc:760)
761 at cemerick.piggieback$run_cljs_repl.invokeStatic(piggieback.clj:169)
762 at cemerick.piggieback$run_cljs_repl.invoke(piggieback.clj:155)
763 at clojure.lang.AFn.applyToHelper(AFn.java:171)
764 at clojure.lang.AFn.applyTo(AFn.java:144)
765 at clojure.core$apply.invokeStatic(core.clj:650)
766 at clojure.core$apply.invoke(core.clj:641)
767 at cemerick.piggieback$evaluate.invokeStatic(piggieback.clj:259)
768 at cemerick.piggieback$evaluate.invoke(piggieback.clj:255)
769 at clojure.lang.Var.invoke(Var.java:379)
770 at cemerick.piggieback$wrap_cljs_repl$fn__9548$fn__9550$fn__9551.invoke(piggieback.clj:291)
771 at cemerick.piggieback$enqueue$fn__9534.invoke(piggieback.clj:247)
772 at clojure.tools.nrepl.middleware.interruptible_eval$run_next$fn__994.invoke(interruptible_eval.clj:190)
773 at clojure.lang.AFn.run(AFn.java:22)
774 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
775 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
776 at java.lang.Thread.run(Thread.java:748)
777
778Error: goog.require could not find: cljsjs.d3
779 at Object.goog.require [as require__] (http://192.168.124.5:9000/goog/base.js:711:15)
780 at Object.clojure.browser.repl.bootstrap.goog.require (http://192.168.124.5:9000/clojure/browser/repl.js:295:16)
781 at eval (eval at <anonymous> (http://192.168.124.5:9000/clojure/browser/repl.js:106:297), <anonymous>:1:6)
782 at http://192.168.124.5:9000/clojure/browser/repl.js:106:297
783 at clojure$browser$repl$evaluate_javascript (http://192.168.124.5:9000/clojure/browser/repl.js:109:4)
784 at Object.callback (http://192.168.124.5:9000/clojure/browser/repl.js:316:169)
785 at goog.net.xpc.CrossPageChannel.goog.messaging.AbstractChannel.deliver (http://192.168.124.5:9000/goog/messaging/abstractchannel.js:141:13)
786 at goog.net.xpc.CrossPageChannel.xpcDeliver (http://192.168.124.5:9000/goog/net/xpc/crosspagechannel.js:734:12)
787 at Function.goog.net.xpc.NativeMessagingTransport.messageReceived_ (http://192.168.124.5:9000/goog/net/xpc/nativemessagingtransport.js:321:13)
788 at Object.goog.events.fireListener (http://192.168.124.5:9000/goog/events/events.js:744:21)
789cljs.user> (require 'cljsjs.d3)
===========================================
1. Unhandled clojure.lang.ExceptionInfo
6 Error: goog.require could not find: cljsjs.d3
7 {:type :js-eval-exception,
8 :error
9 {:status :exception,
10 :ua-product :chrome,
11 :value "Error: goog.require could not find: cljsjs.d3",
12 :stacktrace
13 "Error: goog.require could not find: cljsjs.d3\n at Object.goog.require [as require__] (http://192.168.124.5:9000/goog/base.js:711:15)\n at Object.clojure.browser.repl.bootstrap.$
14 :form (require 'cljsjs.d3),
15 :js "goog.require('cljsjs.d3');\nnull;\n"}
16
17 core.clj: 4617 clojure.core/ex-info
18 repl.cljc: 527 cljs.repl$evaluate_form/invokeStatic
20 repl.cljc: 452 cljs.repl$evaluate_form/invoke
21 repl.cljc: 625 cljs.repl$eval_cljs/invokeStatic
22 repl.cljc: 618 cljs.repl$eval_cljs/invoke
23 repl.cljc: 880 cljs.repl$repl_STAR_$read_eval_print__9038/invoke
24 repl.cljc: 925 cljs.repl$repl_STAR_$fn__9046$fn__9055/invoke
25 repl.cljc: 924 cljs.repl$repl_STAR_$fn__9046/invoke
26 compiler.cljc: 1271 cljs.compiler$with_core_cljs/invokeStatic
27 compiler.cljc: 1260 cljs.compiler$with_core_cljs/invoke
28 repl.cljc: 888 cljs.repl$repl_STAR_/invokeStatic
29 repl.cljc: 760 cljs.repl$repl_STAR_/invoke
30 piggieback.clj: 169 cemerick.piggieback/run-cljs-repl
31 piggieback.clj: 155 cemerick.piggieback/run-cljs-repl
32 AFn.java: 171 clojure.lang.AFn/applyToHelper
33 AFn.java: 144 clojure.lang.AFn/applyTo
34 core.clj: 650 clojure.core/apply
35 core.clj: 641 clojure.core/apply
36 piggieback.clj: 259 cemerick.piggieback/evaluate
37 piggieback.clj: 255 cemerick.piggieback/evaluate
38 Var.java: 379 clojure.lang.Var/invoke
39 piggieback.clj: 291 cemerick.piggieback/wrap-cljs-repl/fn/fn/fn
40 piggieback.clj: 247 cemerick.piggieback/enqueue/fn
41 AFn.java: 22 clojure.lang.AFn/run
43 ThreadPoolExecutor.java: 1149 java.util.concurrent.ThreadPoolExecutor/runWorker
44 ThreadPoolExecutor.java: 624 java.util.concurrent.ThreadPoolExecutor$Worker/run
45 Thread.java: 748 java.lang.Thread/run
REPL
启动脚本:
(ns apps.cljs-rt-browser
(:require [clojure.tools.logging :as log]
[clojure.java.io :as io]
[hiccup.core :refer [html]]
[hiccup.page :refer [include-js]]
[hiccup.element :refer [javascript-tag]]
cljs.build.api
cljs.repl.browser
cemerick.piggieback
))
(def repl-client-url "http://192.168.124.5:9000/repl")
(def index-hcp
[:html
[:head]
[:body
(include-js "goog/base.js" "main.js")
(javascript-tag (cljs.build.api/compile {} '(require 'clojure.browser.repl)))
(javascript-tag (cljs.build.api/compile {} (apply list `(clojure.browser.repl/connect ~repl-client-url))))]])
(def index-path "out/index.html")
(defn -main []
;; generate:
;; module system: goog/base.js, module info of google: goog/deps.js, module of google: goog/**
;; module info of other: main.js, module of others
(cljs.build.api/build "src" {:output-to "out/main.js"
:browser-repl true
:verbose true
})
;; repl will serve static, so just generate index.html
(when-not (. (io/file index-path) exists)
(spit index-path (html index-hcp)))
;; exclude "." from static-dir to avoid overwrite of repl compiled files: out/out/**
(cemerick.piggieback/cljs-repl (cljs.repl.browser/repl-env :static-dir ["out/"]) :repl-verbose true))
(-main)
你能提供更多的背景吗?你的project.clj看起来怎么样?你是如何启动repl的等等,这样我就可以在本地复制它。我已经添加了关于我的问题的更多信息,谢谢你的帮助@Anton Chikin。
(ns apps.cljs-rt-browser
(:require [clojure.tools.logging :as log]
[clojure.java.io :as io]
[hiccup.core :refer [html]]
[hiccup.page :refer [include-js]]
[hiccup.element :refer [javascript-tag]]
cljs.build.api
cljs.repl.browser
cemerick.piggieback
))
(def repl-client-url "http://192.168.124.5:9000/repl")
(def index-hcp
[:html
[:head]
[:body
(include-js "goog/base.js" "main.js")
(javascript-tag (cljs.build.api/compile {} '(require 'clojure.browser.repl)))
(javascript-tag (cljs.build.api/compile {} (apply list `(clojure.browser.repl/connect ~repl-client-url))))]])
(def index-path "out/index.html")
(defn -main []
;; generate:
;; module system: goog/base.js, module info of google: goog/deps.js, module of google: goog/**
;; module info of other: main.js, module of others
(cljs.build.api/build "src" {:output-to "out/main.js"
:browser-repl true
:verbose true
})
;; repl will serve static, so just generate index.html
(when-not (. (io/file index-path) exists)
(spit index-path (html index-hcp)))
;; exclude "." from static-dir to avoid overwrite of repl compiled files: out/out/**
(cemerick.piggieback/cljs-repl (cljs.repl.browser/repl-env :static-dir ["out/"]) :repl-verbose true))
(-main)