簡體   English   中英

ClojureScript-在瀏覽器和Rhino repl之間進行控制台和打印

[英]ClojureScript - console and printing between browser and rhino repl

免責聲明:ClojureScript的新手

問題的上下文是此文件(“運行中”一書中的示例之一,其中有一些我自己添加的示例)。 具體來說,問題是關於最后兩行,您可以忽略其余的行。

(ns hello-compiler.hello)

(defn ^:export main []
  (.write js/document "<h1>Hello, ClojureScript compiler!</h1>"))

(defn asum [a b]
  (+ a b))

(enable-console-print!)

(println "hello.cljs loaded successfully")

為了使最后一行在瀏覽器中起作用,第二行是必需的,否則CLJS-to-JS編譯器生成的代碼不知道如何打印內容:

if (cljs.core._STAR_print_fn_STAR_ == null) {
    throw new Error("No *print-fn* fn set for evaluation environment");

,因此我需要它來運行最后一行(println)。 前面所有表達式的求值都很好,並產生了預期的輸出,即,我在瀏覽器屏幕上看到了問候語,並且能夠運行hello_compiler.hello.asum(2,3) 在倒數第二行中,我還獲得了瀏覽器控制台中的“文件已成功加載”。

但是當我像這樣運行服務器端REPL時:

rlwrap lein蹦床cljsbuild repl-rhino

並像這樣加載文件:

(加載文件“ src / cljs / hello_compiler / hello.cljs”)

,我在(println ...)中看不到該消息。 而且,的確,如果我嘗試從REPL手動(println ..),則會出現異常:

org.mozilla.javascript.EcmaError: ReferenceError: "console" is not defined.

(它沒有顯示在加載文件中,可能到了其他地方)。

當然,在運行(load-file ...)之前,我可以在REPL中手動(println ...)。 啟用控制台打印! 似乎在瀏覽器中有幫助,但是在REPL中禁用了打印。 同樣,如果沒有該enable-console-print! ,(println ...)在REPL中可以正常工作,無論是手動還是加載文件。 它正在讀取純CLJS,而未編譯為JS。

所以問題就來了-是否有一種方法可以使兩種方法都能正常工作? 在哪里可以將.cl​​js文件加載到本地REPL中,並且具有與在瀏覽器中看到的相同行為,該瀏覽器會將編譯后的文件加載到JS版本? 我知道Rhino REPL不像瀏覽器那樣具有“控制台”,但是...當我運行“ node”時,它設法設法弄清console.log =>的意思。指出為什么我期望這種行為是不合理的? 謝謝!

好的,我想我找到了自己問題的答案。 我想得越多,我就越懷疑Rhino“必須”擁有一個控制台對象(使用enable-console-print就可以了)是不合理的! 碼。 因此,我嘗試了一個不同的repl,並將[org.bodil / lein-noderepl“ 0.1.11”]添加到我的:plugins中 然后,使用該REPL,我可以使用相同的代碼同時在瀏覽器和REPL中運行所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM