我有一个相当大的库,其中包含大量需要公开的 API。事实上,我想揭露整个事情。有很多命名空间正在进行,例如:
FooLibrary.Bar FooLibrary.Qux.Rumps FooLibrary.Qux.Scrooge ..
基本上,我想做的是确保用户可以访问整个命名空间。我在这方面遇到了很多麻烦,而且我对关闭完全陌生,所以我想我会征求一些意见。
首先,我需要closurebuilder.py 将完整的文件列表发送到闭包编译器。这似乎不受支持:--namespace Foo 不包括 Foo.Bar。--input 只允许单个文件,而不是目录。我也不能简单地将我的文件列表直接发送到闭包编译器,因为我的代码也需要像“goog.assers”这样的东西,所以我确实需要解析器。
事实上,我能看到的唯一解决方案是拥有一个 FooLibrary.ExposeAPI JS 文件,它包含 @require 的所有内容。这肯定不对吧?
这是我的主要问题。
但是,稍后关闭 ADVANCED_OPTIMIZATIONS 的闭包编译器将优化所有这些名称。现在我可以通过在整个地方添加“@export”来解决这个问题,我对此并不满意,但应该可以。我想在这里使用 extern 也是有效的。或者我可以简单地禁用高级优化。
显然,我不能说“导出 FooLibrary.*”。那没有意义吗?
最后,为了在源代码模式下工作,我需要对goog.require()
我正在使用的每个命名空间进行操作。这只是一个不便,尽管我提到它是因为它与我上面的麻烦有关。我希望能够做到:
goog.requireRecursively('FooLibrary')
为了拉出所有的子命名空间;因此,当我使用库的编译版本时,使用单个命令重新创建我所拥有的环境。
我觉得我可能误解了一些事情,或者应该如何使用 Closure。我有兴趣查看其他基于闭包的库,看看它们是如何解决这个问题的。