请分享您的观点:2024 Clojure状态调查!

欢迎!请参阅关于页面获取有关如何工作的更多信息。

0
ClojureScript
当尝试使用`:global-exports`打包javascript库时,我将收到一个错误


主线程中发生异常 java.lang.IllegalArgumentException: 不支持在类型上使用contains?
        在clojure.lang.RT.contains(RT.java:846)
        在clojure.core$contains_QMARK_.invokeStatic(core.clj:1484)
        在clojure.core$contains_QMARK_.invoke(core.clj:1476)
        在cljs.analyzer$dep_has_global_exports_QMARK_.invokeStatic(analyzer.cljc:782)
...


库存储库:https://github.com/colinkahn/deckgl-cljs

重复步骤


clj -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "1.10.339"} org.clojars.protocol55/deckgl {:mvn/version "0.1.1"}}}' -m cljs.main -e "(require 'com.uber.deckgl) (println com.uber.deckgl/DeckGL)"


移除`:global-exports`后的相同库


clj -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "1.10.339"} org.clojars.protocol55/deckgl {:mvn/version "1.0.0"}}}' -m cljs.main -e "(require 'com.uber.deckgl) (println js/deck.DeckGL)"

5 个回答

0

评论者:mfikes

感谢!

您能否直接在描述中包含任何相关文件?

(见https://script.clojure.org/community/reporting-issues)

0

评论者:mfikes

哦,无所谓。我发现要重复,你只需要发出一个{{clj}}命令。

0
评论人:mfikes_

根本原因在于,尽管文件名为{{deps.cljs}},但编译器将其读作EDN文件。换句话说,符号不应该加引号。

JAR中包含的文件如下


{:foreign-libs [{:file "deckgl/deckgl.min.js"
                 :provides ["com.uber.deckgl"]
                 :global-exports '{com.uber.deckgl deck}}]
 :externs ["deckgl/externs/deckgl.js"]}


这导致了{{contains?}}被应用于{{(quote \{com.uber.deckgl deck\})}},并出现了相应的堆栈跟踪。

嗨,David,你对这件事的看法是什么?我们应该在clojurescript.org的文档中处理这个问题,阐明{{deps.cljs}}实际上应该包含EDN吗?
0
by

评论人:colinkahn

啊,是的,这确实很令人费解,特别是如果你已经知道每种文件类型的规则。 我也在用cljsjs作为参考,但现在意识到输出结果必须只是edn: https://github.com/cljsjs/packages/blob/master/react/build.boot#L31

deps.cljs有点神秘,如果能有一个详细的解释,说明其中有效的选项,那就好了。

可能支持一个类似jslibs.edn的备用名称可能会增加一些清晰度。

0
by
参考:https://clojure.atlassian.net/browse/CLJS-2858(由colinkahn报告)
...