クロージャコンパイラのドキュメントには、「エクスポートの代わりにエクスターナルを使用しないでください」という内容が明確に記載されています。外部宣言を使用することは非常に便利ですので、私は問題に降りてきた:ADVANCED_OPTIMIZATIONSで閉鎖コンパイラを使用する場合Closure Compilerを使用する場合、ライブラリメソッドをエクスポートする最も良い方法は何ですか?
function Lib(){
//some initialization
}
Lib.prototype = {
invoke : function(str){
//this function is called from outside to invoke some of Lib's events
}
}
、関数呼び出しは、ソースから削除されます。
Lib.prototype['invoke'] = Lib.prototype.invoke;
をしかし、これは出力コードの末尾にコードの醜い平和を追加します: はプロトタイプ定義の後に行を追加する:これは、2つの方法で防ぐことができ
Lib.prototype.invoke = Lib.prototype.g;
私は得ることができましたコンストラクタに次の行を追加して、こののRID:
外部宣言ファイルへthis.invoke = this.invoke;
そして、この行:
/**
* @param {String} str
*/
Lib.prototype.invoke = function(str){};
このように、Closure Compilerは、externsファイルで定義されているため、呼び出し元関数を出力コードから削除することはできません。 だから魔法の方がいいですか?
/**
* @param {String} str
* @export
*/
Lib.prototype.invoke = function(str){
//this function is called from outside to invoke some of Lib's events
};
と--generate_exports
フラグをコンパイラを呼び出す:あなたは一貫しJSDocのを使用している場合
これは、 '@ export'タグなしで行うことができます:' Lib.prototype ['invoke'] = function(str){}; ' –
' export'タグを使ってもメソッドの名前は変更されますが、内部で使用されます。これはコンパイラの潜在能力を最大限に活用するためのよりクリーンなアプローチであり、より説明的です。 –
同意しますが、 'export'タグを使って提案された方法は' goog'名前空間を必要とします。そのため、ライブラリをスタンドアロンとして使用することはできません。 –