21

使用しているJavaScriptソースでGoogleクロージャーコンパイラを使用したいと思います。開発モードでは、機能を多くのファイルに分割する傾向がありますが、本番環境では、それらをモジュールに結合する必要があります。

コンパイラを呼び出すときに、コンパイルに含めるファイルのリストを指定できますが、その出力は、コンパイラがファイルリストの順序を保存しなかったことを示しています。

私はそれについて検索し、異なるjsファイル間の依存関係を制御するためにgoog.provide/good.requireを使用できることを発見しました。それに関する問題は、それが私のjsに、私が必要としない、または必要としないコードを追加することです。たとえば、次のようになります。

goog.provide("mainFile")

これを追加します:

var mainFile = {};

コンパイルされたjsファイルに、私が望まないもの。私たちはグーグルクロージャーライブラリをまったく使用していません。私が使用したいのはコンパイラーだけです。

必要のない「クロージャーライブラリ」機能を追加せずに、ファイルの順序をコンパイラーに通知する方法はありますか?もちろん、最初にすべてのファイルを取得し、それらを1つに結合してコンパイラーの入力にする独自のツールを作成することもできますが、コンパイラー自体で実行できる場合は、それを無効にすることをお勧めします。


編集

目標は、このスレッドの答えのようなモジュールを作成できるようにすることです。ClosureCompilerの--moduleオプションを使用して、複数の出力ファイルを作成します。

そのため、順序を制御しながら、どのファイルをどのモジュールに入れるかを制御する機能を追加したいと思います。今のところワイルドカードは使用していませんが、将来的には使用する予定です(可能な場合)。

単に「catfile1.jsfile2.js>Combined.js && compile ...」で十分ですが、この場合は少し複雑で、ロジックに基づいてそれを実行するプログラム/スクリプトを作成する必要があります。どういうわけかコンパイラにファイルの順序を高度に伝えることができれば、そのようなプログラムを実装する時間を節約できるかもしれません。

ありがとう。

4

2 に答える 2

41

複数の出力ファイルを作成するClosure-compilerの機能は、入力ファイルを個別の出力チャンクに分離するための強力なツールを提供します。必要な機能に応じて、さまざまなチャンクをさまざまな時間にロードできるように設計されています。チャンクに関連する複数のコンパイラフラグがあります。

--chunkフラグを使用するたびに、出力ファイルとその依存関係が記述されます。各チャンクフラグは次の構文に従います。

--js inputfile.js
--chunk name:num_files:dependency

結果の出力ファイルはname.jsになり、前の--jsフラグで指定されたファイルが含まれます。

依存関係オプションは、最も関心のあるものです。これは、親チャンクが何であるかを指定します。チャンクオプションは、有効な依存関係ツリーを記述する必要があります(ベースチャンクが必要です)。

次に例を示します。

--js commonfunctions.js
--chunk common:1
--js page1functions.js
--js page1events.js
--chunk page1:2:common
--js page2function.js
--chunk page2:1:common
--js page1addons.js
--chunk page1addons:1:page1

この場合、page1チャンクとpage2チャンクは共通のチャンクに依存し、page1addonsチャンクはpage1チャンクに依存することをコンパイラーに伝えています。

コンパイラーは、コードがそのチャンクによってのみ使用されていると判断した場合、コードを1つのチャンクから他のチャンク出力ファイルに移動できます。

これには、closure-libraryやgoog.require / Provide呼び出しの使用は必要ありません。また、出力にコードを追加する必要もありません。コンパイラーが依存関係を自動的に判別できるようにする場合、またはそれらの依存関係を管理できるようにする場合は、CommonJS、ES2015モジュール、goog.require / Provide/module呼び出しなどのモジュール形式を使用する必要があります。

更新注: 20180610バージョンより前は、chunkフラグの名前はmoduleでした。これらは、適切なJSモジュールとの混同を減らすために名前が変更されました。新しい名前を反映するように回答が更新されました。

更新注2:これらのフラグを自動的に計算して生成するユーティリティが追加されました:https ://github.com/ChadKillingsworth/closure-calculate-chunks

于 2012-05-01T16:41:34.053 に答える
1

たとえば、次のように出力パスを設定することもできます。

--module_output_path_prefix ./public/js/

参照: ClosureCompilerの--moduleオプションを使用して複数の出力ファイルを作成する

于 2017-10-08T00:00:22.497 に答える