2016-09-26 9 views
1

私は、さまざまなjavascriptプラグインを使用するWebサイトと、実行するjsファイルの束(〜30)を持っています。これらのjsファイルを1つのファイルにグループ化して、GoogleのClosure Compilerを使用して、それに基本的な縮小を適用しようとしました(空白を削除するだけです)。jsファイルをグループ化すると、奇妙なjsエラーが返されます

私は、自分のページにClosure Compilersのオンライン版に含まれているのと同じ順番ですべてのjsファイルを導入し、コンパイルを実行しました。コンパイルのパラメータは次のようになります。

// ==ClosureCompiler== 
// @output_file_name default.js 
// @compilation_level WHITESPACE_ONLY 
// .... bunch of javascript files here 
// ==/ClosureCompiler== 

コンパイルが成功し、警告もエラーも発生しませんでした。私は結果ファイルを取り出し、私のサーバーにコピーして、私のページにそれを含めることを試みました。

ページが実行されますが、奇妙なエラーが操作のITの途中で私のjavascriptを停止する、表示されます:

TypeError: event.feature.values_ is undefined 

私はそこにコードルックス、このエラーが起こっているスペースをフェッチしようとしましたこのような何か:

this.vectorLayer.getSource().on("addfeature",function(event){if(typeof event.feature.values_.type=="undefined")return; 

これは私自身のJavaScriptコードがやっているものですが、ページがロードされたときに、コードのこの部分でも実行しないでください。別のjavascriptファイルを使用すると、エラーは発生せずにページが大きく読み込まれますが、空白が削除され、ファイルが結合されると、このエラーが表示されます。

基本的なロジックでは、私は自分のページに含まれているのと同じ順序でファイルを一緒に追加することで、小さなファイルサイズを得るために空白を削除するだけでエラーは発生しませんとにかく、ブラウザーが同期してjsファイルをロードするためです。私はこの点について誤解していますか?そうでない場合、このエラーの原因は何でしょうか?

EDIT 1:

わかりましたので、私は、単一.jsファイルにOpenLayersのjavascriptのファイルを、問題を絞り込みます。もし私がそのファイルをコンパイルせず、別々にインクルードすると、すべて正常に動作します。この奇妙な問題の原因は何でしょうか?

+1

ファイルから空白を削除しても、JavaScriptが壊れる可能性があります。例えば、関数の 'toString()'メソッドを使用して、空白を取り除いて簡単に壊れるようなリフレクションを行う場合などです。 –

+0

なぜあなたは 'event.feature.values_'に依存していますか?なぜAPIメソッドを使用しないのですか? –

+0

@ JonatasWalkerあなたは精巧にできますか?どんなAPIメソッドですか? –

答えて

1

これは、Google側の奇妙なキャッシュメカニズムが原因であることが判明しました。 Closure Compilerを再起動し、すべてのjsファイルをもう一度再導入し、再コンパイルして問題を解決しました。

コメントありがとうございました!

+0

あなた自身の答えを受け入れるべきです。これはオンライン版での明確な問題です。 –

+0

また、テストケースを把握するために多くの時間を費やしているので、特にhttps://github.com/google/closure-compiler/issues/にバグレポートを提出してください – owler