0

公開する必要がある API の重要なセットを含むかなり大きなライブラリがあります。本当は全貌を公開したい。次のように、多くの名前空間が行われています。

FooLibrary.Bar FooLibrary.Qux.Rumps FooLibrary.Qux.Scrooge ..

基本的に、私がやりたいことは、ユーザーがその名前空間全体にアクセスできるようにすることです。私はこれでたくさんの問題を抱えており、閉鎖にはまったく慣れていないので、何らかの意見を求めたいと思いました.

まず、ファイルの完全なリストをクロージャ コンパイラに送信するために、closurebuilder.py が必要です。これはサポートされていないようです: --namespace Foo には Foo.Bar が含まれていません。--input は、ディレクトリではなく、単一のファイルのみを許可します。私のコードは「goog.assers」なども必要とするため、ファイルのリストを直接クロージャ コンパイラに送信することもできません。そのため、リゾルバが必要です。

実際、私が見ることができる唯一の解決策は、@require のすべての FooLibrary.ExposeAPI JS ファイルを持つことです。さすがにそれはあり得ませんよね?

これが私の主な問題です。

ただし、後で ADVANCED_OPTIMIZATIONS をオンにしたクロージャ コンパイラは、これらの名前をすべて最適化します。これで、あちこちに「@export」を追加することで修正できます。これには満足していませんが、機能するはずです。ここで extern を使用することも有効だと思います。または、高度な最適化を無効にすることもできます。

どうやら私ができないのは、「export FooLibrary.*」と言うことです。それは理にかなっていますか?

最後に、ソース モードで作業するには、goog.require()使用しているすべての名前空間に対して行う必要があります。これは単なる不便ですが、上記の問題に関連しているので言及しています。私はできることを望みます:

goog.requireRecursively('FooLibrary')

すべての子名前空間もプルするため。したがって、ライブラリのコンパイル済みバージョンを使用しているときの環境を単一のコマンドで再作成します。

いくつかのこと、または Closure の使用方法を誤解している可能性があるように感じます。他の Closure ベースのライブラリを調べて、これがどのように解決されているかを確認したいと思います。

4

1 に答える 1