_评论来自: mfikes_
注意,附带的补丁做出了一项略微超出工单范围的变化:在{{:provides}}是隐式的情况下(因为{{:file}}代表目录),并且{{:global-exports}}被指定的情况下,之前的代码会将整个全局出口映射复制到每个生成的外国库规范中。这次修订只复制与相关文件相关的子映射。虽然这在生成扩展时是正确的做法,但新的验证逻辑也必须这样做:没有这个变化,任何意外被复制的非相关全局出口都可能导致验证逻辑得出缺少提供的结论。
例如
{:file "libs"
:global-exports {foo foo-g bar bar-g}}
将被扩展成几个库规范,每个"libs"目录中的文件一个,之前的实现会将整个映射复制到每个中。修订后的代码只复制子映射
:global-exports {foo foo-g}
到与{{: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 中找到
...
只有libs/other.js存在时的隐式(目录)情况
java.lang.Exception: 外国库全局出口未隐式提供。文件 ["libs/missing.js" "libs/another.js"] 未在库规范 {:file "libs", :global-exports {other other-g, missing missing-g, another another-g}} 中找到
...