我有一個相當大的庫,其中包含一組重要的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