Clojurescript + Node.js 0.12.7 问题(错误 "process.binding('evals') No such module: evals")
Clojurescript + Node.js 0.12.7 issue (error "process.binding('evals') No such module: evals")
我正在尝试使用 Node.js + ClojureScript,我找到了一篇关于它的文章。
http://www.mase.io/code/clojure/node/2015/01/24/getting-started-with-clojurecript-and-node/
按照说明找到这个错误:
process.binding('evals').NodeScript.runInThisContext.call(
^
Error: No such module: evals
at Error (native)
问题似乎是我需要使用旧版本的节点:https://groups.google.com/forum/#!topic/clojurescript/VneLWVpwe6o and https://github.com/kanso/kanso/issues/422
我的是 0.12.7
pow> node --version
v0.12.7
在这种情况下,我可能需要使用旧版本的节点,但更好的是,有没有办法绕过这个问题?如果none存在,如何在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
编辑2
错误是因为我忘记更新 core.cljs 模块以包含 ((set! *main-cli-fn* -main)
。它在原始文章中与 https://groups.google.com/forum/#!topic/clojurescript/DYpsiCmsyIs and https://github.com/clojure/clojurescript/wiki/Quick-Start#running-clojurescript-on-nodejs.
一起提到
我用两个步骤解决了这个问题:
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) 在我的 project.clj
中设置 optimizations: simple
,如 this blog post 最底部所述。由于我不知道的原因,optimizations: none
破坏了东西。
从post开始,有两种方法可以使它工作,Mac OSX,这两种方法需要不同版本的node.js,这是post中没有解释清楚。
适用于旧版本 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/
修改 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 以便在不使用网络浏览器的情况下测试 clojureScript 代码。我发现 LightTable,并且
a good tutorial about it。我只需要打开 LightTable,连接到 LightTable UI 作为输出,然后执行脚本。所以,我现在使用 ClojureScript/Node.js 的理由要少得多。
我正在尝试使用 Node.js + ClojureScript,我找到了一篇关于它的文章。
http://www.mase.io/code/clojure/node/2015/01/24/getting-started-with-clojurecript-and-node/
按照说明找到这个错误:
process.binding('evals').NodeScript.runInThisContext.call(
^
Error: No such module: evals
at Error (native)
问题似乎是我需要使用旧版本的节点:https://groups.google.com/forum/#!topic/clojurescript/VneLWVpwe6o and https://github.com/kanso/kanso/issues/422
我的是 0.12.7
pow> node --version
v0.12.7
在这种情况下,我可能需要使用旧版本的节点,但更好的是,有没有办法绕过这个问题?如果none存在,如何在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
编辑2
错误是因为我忘记更新 core.cljs 模块以包含 ((set! *main-cli-fn* -main)
。它在原始文章中与 https://groups.google.com/forum/#!topic/clojurescript/DYpsiCmsyIs and https://github.com/clojure/clojurescript/wiki/Quick-Start#running-clojurescript-on-nodejs.
我用两个步骤解决了这个问题:
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) 在我的 project.clj
中设置 optimizations: simple
,如 this blog post 最底部所述。由于我不知道的原因,optimizations: none
破坏了东西。
从post开始,有两种方法可以使它工作,Mac OSX,这两种方法需要不同版本的node.js,这是post中没有解释清楚。
适用于旧版本 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/
修改 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 以便在不使用网络浏览器的情况下测试 clojureScript 代码。我发现 LightTable,并且 a good tutorial about it。我只需要打开 LightTable,连接到 LightTable UI 作为输出,然后执行脚本。所以,我现在使用 ClojureScript/Node.js 的理由要少得多。