如果对 JAR 中的代码发出分析警告,则警告将包括 AOT 缓存路径。
例如,使用以下内容
`
(ns foo.core)
(inc "a")
`
在 {{foo.jar}} 中,加载此代码将导致诊断,消息中包含 AOT 缓存路径
警告:cljs.core/+, 所有参数必须是数字,得到 [string number] 而不是。在第 3 行 /Users/mfikes/.cljs/.aot_cache/1.10.126/47C5358/foo/core.cljs
在这种情况下,可能只表示类路径相对文件名会更好
警告:cljs.core/+, 所有参数必须是数字,得到 [string number] 而不是。在第 3 行 @/foo/core.cljs
或者如果可能,甚至可以使用类似这样的 JAR 文件 URL
警告:cljs.core/+, 所有参数必须是数字,得到 [string number] 而不是。在第 3 行 jar:file:///foo.jar!/foo/core.cljs
为了重现,首先使用以下命令创建 {{foo.jar}},其中包含 {{foo.core}} 命名空间在 {{foo/core.cljs}}
jar cvf foo.jar foo
然后使用 1.10.126 uberjar(在此处重命名为 {{cljs-1.10.126.jar}})启动 Node REPL
java -cp cljs-1.10.126.jar:foo.jar clojure.main -m cljs.repl.node
然后评估
(require 'foo.core)
要查看 1.9.946 的结果,请删除 {{.cljs_node_repl}} 目录,并使用 1.9.946 uberjar(在此处重命名为 {{cljs-1.9.946.jar}})
java -cp cljs-1.9.946.jar:foo.jar clojure.main -m cljs.repl.node
在这种情况下,{{(require 'foo.core)}} 仍然引用本地缓存目录
警告:cljs.core/+, 所有参数必须是数字,得到 [string number] 而不是。在第 3 行 .cljs_node_repl/foo/core.cljs
但相比之下,暴露共享 AOT 缓存路径似乎问题不大。