_由: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}}
...