使用nodejs运行ClojureScript,同时使用另一个lein项目

时间:2015-02-24 16:21:29

标签: javascript node.js leiningen clojurescript

我正在编写一个名为“gpqgame”的clojurescript程序,它可以演变代码片段;它通过在名为“qgame”的模拟器上运行它来评估一段代码的“准确性”,这是另一个目录中的leiningen项目。

到目前为止,我已经手动将所有qgame代码加载到repl中,然后使用它来测试我的进化代码。但是,我希望能够从终端运行代码,所以我将我的gpqgame设置为lein项目,并且一直在尝试使用nodejs。我很快就遇到了麻烦。

Gpqgame似乎无法加载qgame,我不知道为什么,我已经包含了两个的project.clj文件。我已经尝试将整个项目作为lib和foreign-lib加载到cljs-build中,我尝试将qgame的“src”复制到gpqgame的“src”中,同时包含qgame在资源中需要的库gpqgame。我的gpqame.core有以下ns声明:

(ns gpqgame.core
 (:require [clojure.string :as st] 
              [qgame.simulator.interpreter :as inter] 
              [qgame.gp.evaluator :as ev] 
              [qgame.simulator.qgates :as qg]
              [clojure.browser.repl :as repl]))

它包含(enable-console-print!)(set! *main-cli-fn* -main)

每次编辑都会成功,但会发出警告:   1)在qgame代码中使用未声明的变量   2)旧版javascript中不允许使用关键字和保留字作为不带引号的属性名称

当我运行node out/gpqgame.js时,我收到一条引用错误,说“mathjs未定义”。我注意到的一件事是qgame使用0.0-2156,而我的gpqgame使用0.0-2913。如果我将其中一个版本的版本更改为另一个版本,则它们将不再起作用。

有没有一种简单的方法让gpqgame加载整个qgame项目而不必将其包含在gpqgame项目中?

这是最好的方法,还是应该将它包含在qgame的src中?当我这样做时,为什么它不起作用,即使我包含了它需要的库?我不确定这与nodejs有多大关系,以及我自己设置错误的原因。任何帮助将不胜感激。

(defproject gpqgame "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-2913"]]

  :node-dependencies [[source-map-support "0.2.8"]]

  :plugins [[lein-cljsbuild "1.0.4"]
            [lein-npm "0.4.0"]]

  :hooks [leiningen.cljsbuild]

  :source-paths ["src" "target/classes"]

  :clean-targets ["out" "out-adv"]

  :cljsbuild {
    :builds [{:id "dev"
              :source-paths ["src"]
              :compiler {
                :main gpqgame.core
                :target :nodejs
                :output-to "out/gpqgame.js"
                :output-dir "out"
                :optimizations :simple
                :foreign-libs [{:file "http://cdnjs.cloudflare.com/ajax/libs/mathjs/0.18.1/math.min.js"
                                  :provides ["math.js"]}
                               {:file "./resources/arndt.js"
                                  :provides ["arndt.js"]}]
                :pretty-print true
                :cache-analysis true
                :source-map "out/gpqgame.js.map"}}]})

qgame project.clj看起来像:

(defproject org.clojars.hippiccolo/qgame "0.4.4"
  :description "Quantum Gate And Measurement Emulator, or qgame. A machine-instruction-level quantum computing simulator. Ported from Lee Spector's QGAME (written in Common Lisp)."
  :license {:name "MIT License"
            :url "http://http://en.wikipedia.org/wiki/MIT_License"}
  :url "https://github.com/omriBernstein/qgame"
  :dependencies [[org.clojure/clojure "1.5.1"]
                 [org.clojure/clojurescript "0.0-2156"]] ;2156
  :plugins [[lein-cljsbuild "1.0.2"]]
  :cljsbuild {:builds
              {:dev {:source-paths ["src"]
                     :compiler {:output-to "static/qgame.js"
                                :optimizations :whitespace
                                :pretty-print true
                                :libs ["~/computer/javascript/prototype.js"]
                                :foreign-libs [{:file "http://cdnjs.cloudflare.com/ajax/libs/mathjs/0.18.1/math.min.js"
                                                :provides ["math.js"]}
                                               {:file "./resources/arndt.js"
                                                :provides ["arndt.js"]}
                                               {:file "./resources/prototype.js"
                                                :provides ["prototype.js"]}]}}
               :prod {:source-paths ["src/qgame"]
                      :compiler {:output-to "static/qgame.min.js"
                                 :optimizations :whitespace ;Eventually do :advanced here
                                 :pretty-print false
                                 :libs ["~/computer/javascript/prototype.js"]
                                 :foreign-libs [{:file "http://cdnjs.cloudflare.com/ajax/libs/mathjs/0.18.1/math.min.js"
                                                 :provides ["math.js"]}
                                                {:file "./resources/arndt.js"
                                                 :provides ["arndt.js"]}
                                                {:file "./resources/prototype.js"
                                                 :provides ["prototype.js"]}]}}}
              :repl-listen-port 9000}
  :min-lein-version "2.0.0")

0 个答案:

没有答案