2009-06-18 12 views
1

問題を引き起こしている縮小/パックされたjavascriptファイルがあります。問題は、パックされていない入力ファイルには、改行があるときに問題にならないセミコロン()がいくつかありますが、ファイルがパックされたときに改行が削除され、パーサーエラーが発生することです。たとえば:JavaScriptのパッキング問題

//input 
var x = function() { 
    doSomething(); 
} // note: no semicolon 
var y = 'y'; 

//---- 
// output 
var x=function(){doSomething();}var y='y'; 
//     error here:^

奇妙なことは、私がやるときにセミコロンと改行、ファイルの作品で、すべてのセミコロンを置き換えるために、出力ファイルに置き換えるということです! AFAIKでは、セミコロンの後に改行があっても何も変わらないような状況は考えられないので、エラーを見つけ出すのは馬鹿げて難しいです。この交換を行うことがなぜ機能するのかについてのアイデアはありますか?

答えて

5

ええと... JSLintを試しましたか?

+4

私の気持ちを傷つける。 – nickf

+2

ダンク・ユー・ダグ・クロックフォード! – ichiban

+0

説明:パッケージ化されていないファイルをJSLintで実行し、エラーが発生してセミコロンが見つからない場合は、この問題を解決しました。私はまだセミコロンの後に改行を追加するときになぜそれが働いたのか混乱しています... – nickf

3

改行がある場合、暗黙のセミコロンがあります。

+0

はい私は知っています。ファイル内の唯一の改行はセミコロンの直後にあるので、何かを暗示する必要があり、それが機能しています。 – nickf

2

jslintを使用してコードを確認してください。これを行い、セミコロンに関して渡すようにすれば、正しくパックされるはずです。

JavaScriptでは、改行でセミコロンが暗黙的に追加されます。これにより、あいまいな状況が発生します。このブログ記事:http://robertnyman.com/2008/10/16/beware-of-javascript-semicolon-insertion/は問題を簡潔に説明し、例を挙げています。

+0

すばらしいリンク。それについて全く知らなかった。 –

1

JSlintは良い解決策です。また、一部のコードエディタでは、この種のエラーが発生します。正しくリコールすれば、NetBeansは入力時にこれらをリアルタイムでキャッチします。私はコモドとアプタナも同様だと信じています。

+1

IntelliJ IDEAも同様です。 –