【问题标题】:Clojurescript quickstart issue with leiningenleiningen 的 Clojurescript 快速入门问题
【发布时间】:2018-04-03 11:09:50
【问题描述】:

我在 Window 7 上关注 Clojurescript QuickStart 并坚持最后一点 - 与 Leiningen 一起运行。
简单命令:

lein run -m clojure.main repl.clj

返回错误,堆栈跟踪如此开始:

clojure.lang.Compiler$CompilerException: java.io.FileNotFoundException: Could not locate cljs/repl__init.class or cljs/repl.clj on classpath: , compiling:(X:\n\code\hello_world\repl.clj:1:1)

我在网上搜索并找到最近的case,但我刚刚从该站点复制了整个代码,所以我相信没有错字。
我错过了什么?

repl.clj:

(require 'cljs.repl)
(require 'cljs.build.api)
(require 'cljs.repl.browser)
(cljs.build.api/build "src"
  {:main 'hello-world.core
   :output-to "out/main.js"
   :browser-repl true
   :verbose true})
(cljs.repl/repl (cljs.repl.browser/repl-env)
  :watch "src"
  :output-dir "out")


更新: 我用 lein 创建了项目“hw”,将 repl.clj 和 cljs.jar 复制到了项目根目录。我也将 cljs.jar 复制到 src 目录(快速入门指南中提到 src 自动进入类路径),但结果是一样的。
项目.clj:

 (defproject hw "0.1.0-SNAPSHOT"
      :description "FIXME: write description"
      :url "http://example.com/FIXME"
      :license {:name "Eclipse Public License"
                :url "http://www.eclipse.org/legal/epl-v10.html"}
      :dependencies [[org.clojure/clojure "1.6.0"]]
      :main ^:skip-aot hw.core
      :target-path "target/%s"
      :profiles {:uberjar {:aot :all}})

更新 2
即使添加 clojurescript 作为依赖项也没有运气:

(defproject hw "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [org.clojure/clojurescript "1.7.170"]
                 ]
  :main ^:skip-aot hw.core
  :target-path "target/%s"
  :profiles {:uberjar {:aot :all}})

将 cljs.jar 放入 lib direcroty 也没有帮助。
https://youtu.be/ciCQ_Nkis4I

【问题讨论】:

  • 能否请您附上您的project.clj?看起来 lein 可能不会将 ClojureScript jar 添加到类路径中。
  • 在 Leiningen 部分中提到运行lein classpath。如果你运行它,你会(我怀疑)看到 cljs.jar 不存在。与 Leiningen 做的通常事情就是在依赖项中添加对 ClojureScript 的引用,类似于 Clojure 的引用。
  • 感谢您的建议,但不幸的是 src 目录位于 lein 类路径 youtu.be/S7aQAmoqNpM 中。我会尝试依赖项。
  • src 目录仅用于获取源文件。您希望(但目前不会)看到提到的 jar 文件。把jar文件放到需要创建的\lib目录下会得到什么?您应该从lein classpath 获取目录和jar。例如,在我自己的项目中,这是一个示例目录:/home/chris/IdeaProjects/b00ks/src/main:。这是一个示例 jar 文件:/home/chris/.m2/repository/clj-time/clj-time/0.11.0/clj-time-0.11.0.jar:
  • 更改项目文件后,请执行lein cleanlein deps 以确保获取依赖项。

标签: clojurescript leiningen


【解决方案1】:

要让 Leiningen 获取 cljs.jar,您需要从项目根目录中创建一个 lib 目录并将 cljs.jar 放入其中。 本教程在“依赖项”部分下确实提到了这一点,就在 Leiningen 部分之前:

如果你有一些依赖项,一个惯例是将它们放在一个名为 lib 的文件夹中

我猜你应该推断 Leiningen 遵循这个约定。

我的工作证据在这里:leiningen - how to add dependencies for local jars?

不过请注意底部有一条评论:

从 Leiningen v2 开始,lib/ 目录功能已被删除。

所以快速入门教程已经过时了。

我建议直接去figwheel 了解 Clojurescript 的介绍,尽管那里说了些什么。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-12-08
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
相关资源
最近更新 更多