Clojurescript + Node.js 0.12.7问题(错误“process.binding('evals')没有这样的模块:evals”)

我试图使用Node.js + ClojureScript,我find了一个文章。

http://www.mase.io/code/clojure/node/2015/01/24/getting-started-with-clojurecript-and-node/

按照说明find这个错误:

process.binding('evals').NodeScript.runInThisContext.call( ^ Error: No such module: evals at Error (native) 

这个问题似乎是我需要使用旧版本的节点: https : //groups.google.com/forum/#!topic / clojurescript / VneLWVpwe6o和https://github.com/kanso/kanso/issues/422

矿是0.12.7

 pow> node --version v0.12.7 

在这种情况下,我可能需要使用旧版本的节点,但更好的方法是绕过这个问题吗? 如果不存在,如何在Mac OS X中使用旧版本的node.js?

编辑

在https://github.com/creationix/nvm之后,我可以安装0.10.32版本的node.js。

 pow> nvm install 0.10.32 pow> node --version v0.10.32 

但是,它给了我另一个错误信息:

 pow> node entrypoint.js Hello world! /Users/smcho/Desktop/clojurescript/pow/out/server/cljs/core.js:12133 var fixed_arity = f.cljs$lang$maxFixedArity; ^ TypeError: Cannot read property 'cljs$lang$maxFixedArity' of null 

EDIT2

这个错误是因为我忘了更新core.cljs模块来包含((set! *main-cli-fn* -main) 。原来的文章和https://groups.google.com/forum /#!topic / clojurescript / DYpsiCmsyIs和https://github.com/clojure/clojurescript/wiki/Quick-Start#running-clojurescript-on-nodejs 。

从这篇文章来看,有两种方法可以使它工作,在Mac OSX中,这两种方法需要不同版本的node.js,这在后面没有清楚地解释。

与旧的node.js一起工作的版本

_project.clj

 (defproject pow "0.1.0-SNAPSHOT" :description "FIXME: write this!" :url "http://example.com/FIXME" :dependencies [[org.clojure/clojure "1.6.0"] [org.clojure/clojurescript "0.0-2725"]] :node-dependencies [[source-map-support "0.2.8"]] :plugins [[lein-cljsbuild "1.0.4"] [lein-npm "0.4.0"]] :source-paths ["src" "target/classes"] :clean-targets ["out/server/pow" "out/server/pow.js"] :cljsbuild { :builds [{:id "server" :source-paths ["src/server"] :compiler { :main pow.core :output-to "out/server/pow.js" :output-dir "out/server" :optimizations :none :target :nodejs :cache-analysis true :source-map true}} ]}) 

entry.js

 // entrypoint.js require("./out/server/goog/bootstrap/nodejs"); require("./out/server/pow"); require("./out/server/pow/core"); 

运行执行旧node.js的脚本

 #!/bin/bash lein new mies pow cd pow cp ../_project.clj project.clj mkdir src/server mv src/pow src/server/ lein cljsbuild once cp ../entrypoint.js . /Users/smcho/.nvm/v0.10.32/bin/node entrypoint.js 

与新的node.js一起工作的版本

修改_project.clj

 :optimizations :simple <- :source-map "out/server/pow.js.map" <- 

运行runme.sh的第一部分

 lein new mies pow cd pow cp ../_project.clj project.clj mkdir src/server mv src/pow src/server/ 

MOdify core.clj

 (ns pow.core (:require [clojure.browser.repl :as repl])) (enable-console-print!) (defn -main [] (println "Hello world!")) (set! *main-cli-fn* -main) 

然后是shell脚本的第二部分

 cd pow lein cljsbuild once node out/server/pow.js 

再一个注意

我想使用ClojureScript / Node.js来testingclojureScript代码而不使用Web浏览器。 我find了LightTable ,以及一个很好的教程 。 我所需要的只是打开LightTable,连接到LightTable UI作为输出,然后执行脚本。 所以,我现在还没有更多的理由使用ClojureScript / Node.js。

在这里输入图像说明

我用两个步骤来解决这个问题:

1)声明一个main函数

 (ns testproj.core (:require [clojure.browser.repl :as repl])) (enable-console-print!) (defn -main [] (println "Hello world!")) (set! *main-cli-fn* -main) 

2)设置optimizations: simple在我的project.clj ,如在这篇博客的底部所指出的 。 由于我未知的原因, optimizations: none打破东西。