我正在尝试使用"foreign" JavaScript dependencies in Clojurescript来解决问题。我已经阅读了Google在该主题上提供的所有内容,但仍然无法理解该过程。特别是,我对如何依赖Clojurescript中的jsonld.js库感兴趣。
我没有得到一些要点:
:foreign-libs
放入deps.cljs或编译器选项(例如project.clj中的:compiler
映射)? :file
中:foreign-libs
的值是否解释为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}
最佳答案
更新: :foreign-libs
选项采用外国库的 vector ,而不是单个 map 。:foreign-libs
选项可以直接提供给编译器,也可以通过jar中的deps.cljs
文件提供给编译器。当您要将Javascript库打包在其他人可以使用的jar中时,deps.cljs
最有用-稍后可能有用,但现在不需要。
我认为在您的特定示例中,问题在于您作为:file
提供的路径。路径是相对于classpath的,并且resources/
目录的内容已添加到classpath中,这意味着,如果您想以相对于classpath的方式指向resources/jsonld.js
,则只是jsonld.js
。
PS:您也可以将URL作为:file
提供,编译器将为您下载它们。
关于javascript - 如何在Clojurescript中使用 “foreign” JavaScript依赖项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34352645/