問題タブ [google-closure-compiler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
4448 参照

javascript - 警告-グローバルこのオブジェクトの危険な使用

GoogleClosureCompilerで警告が表示されます

警告-グローバルこのオブジェクトの危険な使用

これが例です。エラーラインとオフセットは単語の先頭を指しますthis

匿名メソッドに変更するだけですがaToggle、ファイル内の他の場所で再利用しているため、名前を付ける必要があります。

aToggle--としてマーク/**@constructor*/することはできますが、コンストラクターではありません。この警告を削除するために使用できる別のアノテーションはありますか、それともコンストラクターとしてマークするか、無用な警告を大量に表示するかの間で立ち往生していますか?

0 投票する
2 に答える
1321 参照

javascript - GoogleClosureを使用して構成オブジェクトを定義する最良の方法

GoogleClosureコンパイラがコード内のシンボルを最適化する方法が大好きです。ただし、構成オブジェクトをパラメーターとして受け取るパブリックのエクスポートされた関数を定義する良い方法は見つかりませんでした。このコードスニペットについて考えてみましょう。

ここで、このスクリプトをロードし、次のようにmyFooを呼び出したいとします。

コンパイルすると、idプロパティとclazzプロパティが圧縮されているため、これは失敗します。

Google Closureコンパイラを使用して構成オブジェクトを実装およびエクスポートするための洗練された方法を知っている人はいますか?

0 投票する
2 に答える
2991 参照

javascript - 関数を呼び出すときにClosureCompilerが共用体型について文句を言うのをやめるにはどうすればよいですか?

これは、jQuery-1.4.3externsファイルを使用しているときに特に見られます。そのためのjavadocは

次のような電話があります。

クロージャーの文句:警告-jQueryObject.prototype.heightの実際のパラメーター1が、見つかった正式なパラメーターと一致しません:(jQueryObject | null | number)required:(function(number、number):?| number | string | undefined)$('# Xobni')。height($(window).height());

遊んでみると(可能な戻り型を削除して)、問題はwidthへの最初の呼び出しがおそらくjQueryObjectを返す可能性があることであり、それは有効な入力ではないため、Closureはエラーを返します。私はこれを追加してみました:

しかし、Closureは次のように文句を言います。警告-初期化変数が見つかりました:(jQueryObject | null | number)が必要です:number var w = $(window).width();

問題は、widthが引数を取ると、jQueryObjectを返すことです。引数を取らない場合は、数値を返します。だから私は私の呼び出しが大丈夫であることを知っていますが、javadocsはそれを完全に反映していないので、Closureは私に警告しています。javadocsを適切に修正する方法、またはこの結果が数値になることをClosureに伝える方法はありますか。おそらくエラーを抑制できることはわかっていますが、これらに注釈を付ける方法を知りたいと思います。

助けてくれてありがとう!

0 投票する
7 に答える
15197 参照

javascript - GoogleClosureCompilerアプリケーションを使用してすべてのファイル.jsを1つのファイルに圧縮します

.jsコマンドラインでGoogleクロージャーコンパイラを使用して、同じディレクトリ内のすべてのファイルを1つのファイルに圧縮したいと思います。

1つのファイルの場合:

しかしfinal.js、最後の圧縮ファイルを上書きせずに、他のファイルを最後に配置する方法をドキュメントで見つけられませんでしたか?

私はそのようなものが欲しいです:

すべてのファイルをファイルに追加し、それを圧縮した後にプログラムを実行することは可能ですか、それとも実行する必要がありますか?あなたが私を助けることができればありがとう!

0 投票する
2 に答える
278 参照

google-closure-compiler - Closure Compiler が無名関数から返されたオブジェクトに関数シグネチャを強制しないのはなぜですか?

Crockford によって一般的に推進されているように、プライベート/パブリック アクセス制限のあるオブジェクトを作成しています。たとえば、次のようなものがあります。

次のような電話をかけると

クロージャーは、間違った数の引数で関数を呼び出していることを教えてくれるはずです。myPublicFunction の JavaDoc コメントで Closure を支援しようとしました。

それでも、文句はありません。私は foo に対してさまざまな形式の JavaDoc を試しましたが、機能する唯一のものは、それをレコード型として文書化することでした:

これは機能しましたが、コンパイラは、myPublic オブジェクト関数が実際に JavaDoc のレコード フィールドに記載されている署名と一致することを強制しようとしませんでした。したがって、これらの返されたオブジェクトにすべての関数を確実にドキュメント化し、ドキュメント内の署名を実際に返すものと一致させるようにしている限り、これは機能します。これを強制するためのより良い方法がありませんか?

ありがとう!

0 投票する
3 に答える
3559 参照

javascript - Google Closure Compiler の高度な機能: コンパイル時にコード ブロックを削除する

このコードを取得してコンパイルすると (高度な最適化)

このコードを取得します

Closure Compiler を使用して toString 関数を削除する方法はありますか?

0 投票する
4 に答える
2571 参照

javascript - Google ClosureCompilerは100%入力されました

Googleクロージャコンパイラに関してアプリケーションを100%入力するにはどうすればよいですか?

私はすでにすべてをjsdocコメントでタグ付けしました。100を取得することさえ可能ですか?私は64,6%です

0 投票する
2 に答える
1205 参照

javascript - IEを破るECMAScript/JavaScriptエラーを見つける

私は比較的巨大なECMAScriptコードベース(> 60,000 LOC)に取り組んでおり、恐ろしい友人であるInternet Explorer(特に6と7)のエラーの検出に少し苦労する傾向があります。

現時点では、RIAがGoogle Chrome、Firefox 3.6、Opera、Internet Explorer 8で正常にレンダリングされるという問題に3日間悩まされていますが、Internet Explorer 8をIE7モード(または実際のIE)で実行すると失敗します-7)。

私の質問は本当にです:IE7でエラーを生成するコードを特定するにはどうすればよいですか?

通常、私はJSLintに依存しており、通常の容疑者を捕まえる傾向があります(末尾のコンマ、嫌いです)が、この特定のケースでは、ソースと最小化の両方のすべてのコードでリンターを再実行しましたが、そうではありません私のいつもの容疑者を譲ります。だから私はIEが気に入らないものを誤って導入したと思います(誰が知っているので、どこかでdojo.mapの代わりにArray.mapを使用しましたか?)そしてそれは私の顔に爆発し、そうでない素晴らしいエラーメッセージを生成します私を助けてください(「[オブジェクトオブジェクト]」と「null」は本来あるべきではないので、上流でエラーが発生し、サイレントに失敗してこのオブジェクトを作成できなかったと思います)。

Google Closure Linterを試してみましたが、特別なことは何も得られず、GoogleClosureCompilerも私の救世主になるとは思いません。適切なエラーを取得できるように、IEをエミュレートしているかのようにコードを解析/実行できるツール(コマンドライン、Webサービスなど)はありますか?

ヒントをいただければ幸いです。

編集:これまでの私の問題を解決するためにあなたの助けをありがとう、しかし私が本当に求めているのは、特定のブラウザに対して機能セットと構文を検証することを意味する、この種のチェックを行うツールがあるかどうかです。これは、私の意見ではJSの世界にひどく欠けている種類のものです(FFやChromeの場合はそれほど多くはありませんが、明らかにデバッガーの方が少し便利です)。

EDIT2:2つのブランチ間のすべてのコード変更を調べ、問題は実際にはすでに存在しているが、以前は検出されなかったことに気づき、さらに古い変更を繰り返して絞り込んだことで、最終的に今日(3日後)に問題の根本を見つけました。混乱し、最終的には障害点に達するまでどこにでもコンソールログを追加することになります(すべての行にログを追加する正規表現のサポートについてemacsに感謝します...重いですが機能します...)。面白い事実:IEは、元々ソースの問題をキャッチしてから再スローするtrycatchブロックに表示されるはずのエラーメッセージを飲み込んだ。それでも理由はわかりませんが、そうでなければ、壊れた場合に備えてその目的のために意図されていたので、見つけるのははるかに簡単でした。変。深いレベルの再スローは好きではないかもしれません。

今のところ、実際の質問に対する答えはありませんので、質問は開いたままにしておきます。

0 投票する
3 に答える
5078 参照

google-closure - Google Closure Compiler の extern を自動生成する方法

いくつかの外部ライブラリ依存関係を持つ JavaScript プロジェクトで作業していて、ADVANCED_OPTIMIZATIONS モードで Google Closure Compiler を使用してソースをコンパイルしたいとします。

このモードでは、コンパイラは外部ライブラリ オブジェクトおよび関数へのコード呼び出しの名前を変更するため、この名前変更が発生しないようにexternsを指定する必要があります。

しかし、extern を手作業で生成するのは大変な作業です。特定の JavaScript ライブラリから適切な extern を自動生成する最良の方法は何ですか?

0 投票する
2 に答える
2124 参照

javascript - Google Closureコンパイラを特定の関数をインライン化しないようにすることは可能ですか?

クロージャコンパイラは関数をインライン化しますが、その関数がインライン化されていない場合、コードサイズは小さくなります(私はコードサイズのみを気にします-これはJS1k用です)。その関数をインライン化したくないことをコンパイラーに伝えることはできますか?

編集:もう少し説明するために、ここに私の関数があります:

aキャンバスコンテキストのどこ。コードには非常に多くa.lineToのが含まれているため、この関数を使用する価値があります。このように、私のコードは1019バイトです(そしてすべてのlineTosはに置き換えられa.lineToます)。関数を次のように変更した場合:

新しい行はどういうわけかコンパイラにこの関数をインライン化しないように強制します。これにより993バイトが得られます。したがって、私が取り除くことができれば、console.log();さらに14バイト節約できます。