2024 Clojure 状态调查中分享您的看法!

欢迎!有关如何使用本站,请参阅关于页面以获取更多信息。

0投票
ClojureScript

目前我们尚未验证 :global-exports。它必须映射到表示 JavaScript 全局变量的某个符号。

3 答案

0投票
_由:mfikes_发表的评论

注意,附带的补丁进行了一处稍微超出任务范围的变化:在 :provides 是隐式的情况下(因为 :file 代表一个目录),且指定了 :global-exports,之前的代码会将整个全局导出映射复制到生成的每个 foreign lib 规范中。这次修改仅复制与相关文件相关的子映射。虽然这似乎是在生成扩展时正确的事情,但在新的验证逻辑中也是必要的:没有这个变化,任何意外复制的不相关全局导出会导致验证逻辑得出存在缺失提供的结论。

例如


{:file "libs"
 :global-exports {foo foo-g bar bar-g}}


将被扩展为几个 lib 规范,每个文件在 "libs" 中一个,使用之前的方法会复制整个映射到每个中。修改后的代码只复制子映射


:global-exports {foo foo-g}


到相关的 spec,即 {{:file "libs/foo.js"}}

示例验证消息

显式情况


java.lang.Exception: 外部库全局导出未提供:["missing-lib" "another-lib"] 在 {{:file "libs/mylib.js", :provides ["my-lib"], :global-exports {my-lib mylib, missing-lib missing, another-lib another}} 中的 :provides 中未找到
...


显式情况,带命名空间


java.lang.Exception: 外部库全局导出未提供:["missing-lib" "another-ns/another-lib"] 在 {{:file "libs/mylib.js", :provides ["some-ns/my-lib"], :global-exports {some-ns/my-lib mylib, missing-lib missing, another-ns/another-lib another}} 中的 :provides 中未找到
...


仅在存在库/other.js 的情况下隐式(目录)情况


java.lang.Exception: 外部库全局导出未隐式提供。文件 ["libs/missing.js" "libs/another.js"] 未找到库规范 {{:file "libs", :global-exports {other other-g, missing missing-g, another another-g}}
...


0投票

评论由:mfikes提供

将 CLJS-2781.patch 添加到补丁请求(i)

0投票
参考:[https://clojure.atlassian.net/browse/CLJS-2781](https://clojure.atlassian.net/browse/CLJS-2781)(由 dnolen 报告)
...