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

标签 node.js clojure clojurescript

我正在尝试使用 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)

问题似乎是我需要使用旧版本的 Node :https://groups.google.com/forum/#!topic/clojurescript/VneLWVpwe6ohttps://github.com/kanso/kanso/issues/422

我的是0.12.7

pow> node --version
v0.12.7

在这种情况下,我可能需要使用旧版本的 Node ,但更好的是,有没有办法绕过这个问题?如果不存在,如何在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/DYpsiCmsyIshttps://github.com/clojure/clojurescript/wiki/Quick-Start#running-clojurescript-on-nodejs 一起提到。

最佳答案

来自post ,有两种方法可以使其工作,对于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}}
                         ]})
入口.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 代码,而不使用 Web 浏览器。我发现LightTable , 和 a good tutorial about it 。我所需要做的就是打开 LightTable,连接到 LightTable UI 作为输出,然后执行脚本。因此,我现在使用 ClojureScript/Node.js 的理由要少得多。

enter image description here

关于node.js - Clojurescript + Node.js 0.12.7 问题(错误 "process.binding(' evals')没有这样的模块 : evals"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32425804/

相关文章:

node.js - MongoDB 找不到 Promise 类型定义

clojure - 如何在 ClojureScript 中获取由 fetch API 返回的 Response 对象的正文文本?

clojure - clojure/clojurescript 中的私有(private) def

javascript - Clojurescript - 从匿名函数 promise 回调中重复出现

clojure - 包含conj的接口(interface)?

clojurescript - 为什么这个查询没有返回结果?

javascript - Node js 添加所需的模型

mysql - Sequelize 'where' 在父表和子表上

node.js - 如何在 Node 6.10.1 中使用 npm 安装所有依赖项

clojure - 快速插入到 clojure seq 的开头和结尾?