我正在尝试理解如何在Clojurescript中使用"外部"JavaScript依赖项。我已经阅读了谷歌关于这个主题的大部分内容,但我仍然无法理解这个过程。特别是,我想知道如何从Clojurescript依赖jsonld.js库。
我还有一些问题:
我还有一些问题:
您将
:foreign-libs
放入deps.cljs还是编译器选项(例如project.clj中的:compiler
映射)中?:foreign-libs
中的:file
值是否被解释为Java资源?您将用作外部库的JavaScript文件放在哪里?我尝试将它们放入resources
和其他地方,但所有尝试都导致java.lang.NullPointerException
。
# Create an empty Clojurescript project
lein new figwheel jsonld
# Download jsonld.js library
cd jsonld/resources
curl -O http://cdnjs.cloudflare.com/ajax/libs/jsonld/0.3.15/jsonld.js
# Configure foreign libs in project.clj.
# Add the following into `:compiler` in the dev build:
# :foreign-libs {:file "resources/jsonld.js"
# :provides ["jsonld"]}
lein figwheel # => java.lang.NullPointerException
或者,如果我提供以下内容的deps.cljs
:
{:foreign-libs {:file "jsonld.js"
:provides ["jsonld"]}}
然后Figwheel启动,但是当我调用(require '[jsonld])
时,会出现以下错误:
WARNING: JavaScript file found on classpath for library `jsonld`, but does not contain a corresponding `goog.provide` declaration
clojure.lang.ExceptionInfo: No such namespace: jsonld, could not locate jsonld.cljs, jsonld.cljc, or Closure namespace "jsonld" {:tag :cljs/analysis-error}
clojure.java.io/resource
,导致了java.lang.NullPointerException
,因此我尝试仅将:file
提供为jsonld.js
。然而,以这种方式引发了相同的异常。 - Jindřich Mynarz:file
中使用 jsonld.js 库的 URL 会导致相同的异常(堆栈跟踪:https://gist.github.com/jindrichmynarz/ab0e532e94a6353f9f28)。 - Jindřich Mynarz:foreign-libs [{:file ...}]
- 注意向量! - Martin Klepsch