我有一个相当大的库,其中包含一组重要的API,我需要公开它们。事实上,我想揭露一切。这里是怎么回事了很多命名空间,如:关闭: - 命名空间Foo不包括Foo.Bar和相关问题
FooLibrary.Bar FooLibrary.Qux.Rumps FooLibrary.Qux.Scrooge ..
基本上,我想要做的是确保在用户可以访问整个名称空间。我在这方面遇到了很多麻烦,而且我完全不熟悉闭包,所以我想我会要求一些输入。
首先,我需要closbuilder.py将完整的文件列表发送给闭包编译器。这似乎并不支持:--namespace Foo不包含Foo.Bar。 - 输入只允许一个文件,而不是一个目录。我也不能直接将我的文件列表发送给闭包编译器,因为我的代码也需要诸如“goog.assers”之类的东西,所以我确实需要解析器。
实际上,我能看到的唯一解决方案是拥有一个FooLibrary.ExposeAPI JS文件,它需要所有的东西。当然,这不可能是正确的?
这是我的主要问题。
但是,稍后,使用ADVANCED_OPTIMIZATIONS的闭包编译器将优化所有这些名称。现在我可以通过在所有地方添加“@export”来解决这个问题,我不喜欢它,但应该可以工作。我想在这里使用extern也是有效的。或者我可以简单地禁用高级优化。
我不能做的显然是说“export FooLibrary。*”。这不合理吗?
最后,为了在源模式下工作,我需要为我使用的每个名称空间执行goog.require()
。这只是一个不便之处,虽然我提到了,因为它与我上面的麻烦有关。我宁愿能够做到:
goog.requireRecursively(“FooLibrary”)
为了把所有的孩子命名空间为好;因此,使用单个命令重新创建当我使用我的库的编译版本时所具有的环境。
我觉得我可能会误解一些事情,或者应该如何使用Closure。我有兴趣查看其他基于Closure的库来了解它们如何解决这个问题。
谢谢,这是非常有帮助的。 – miracle2k
+1。对所有未来的图书馆作者提供很好的建议 – Technetium