_评论者:mfikes_
注意,附加的补丁进行了一项有点超出工单范围的变化:在{{:provides}}是隐式的情况下(因为{{:file}}代表一个目录),并且指定了{{:global-exports}},前一段代码会将整个全局导出映射复制到生成的每个 foreign lib 规范中。我们已经将其修订为仅复制相关的子映射。当生成扩展时,这似乎是正确的事情,但使用新的验证逻辑时也是必要的:如果没有这个改变,任何非相关全局导出发生并复制时会导致验证逻辑得出结果,认为有缺失的提供。
例如
{:file "libs"
:global-exports {foo foo-g bar bar-g}}
将扩展为几个 lib 规范,每个“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}}中找到
...
显式情况,带有命名空间
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}}中找到
...
隐式(目录)情况,仅存在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}}相关
...