2016-04-13 1 views
0

これで、RequireJSをモジュール化し、Grunt(RequireJSオプティマイザプラグイン)を使用してコードをコンパイルして最小化した非常に包括的なAngularJSアプリケーションを取りました。RequireJSを使用したAngularJSアプリケーションはSafariとFirefoxで "strict strict"エラーを表示します

縮小さコードは私にFirefoxで次のエラーを与える:

は:

とSafariでの「にSyntaxError strictモードのコードでは、関数は、トップレベルのみで、またはすぐに別の関数内で宣言することができます」 :

「にSyntaxError:厳格モードは辞書的にネストされた文で関数宣言を許可していません。」ここで

は、コードの最初の部分である:

function(e, t, n) { 
"use strict"; 

function r(e) { 
    return function() { 
     var t = arguments[0], 
      n = "[" + (e ? e + ":" : "") + t + "] ", 
      r = arguments[1], 
      i = arguments, 
      s = function(e) { 
       return typeof e == "function" ? e.toString().replace(/ \{[\s\S]*$/, "") : typeof e == "undefined" ? "undefined" : typeof e != "string" ? JSON.stringify(e) : e 
      }, 
      o, u; 
     o = n + r.replace(/\{\d+\}/g, function(e) { 
      var t = +e.slice(1, -1), 
       n; 
      if (t + 2 < i.length) return n = i[t + 2], typeof n == "function" ? n.toString().replace(/ ?\{[\s\S]*$/, "") : typeof n == "undefined" ? "undefined" : typeof n != "string" ? ht(n) : n; 
      return e 
     }), o = o + "\nhttp://errors.angularjs.org/1.2.29/" + (e ? e + "/" : "") + t; 
     for (u = 2; u < arguments.length; u++) o = o + (u == 2 ? "?" : "&") + "p" + (u - 2) + "=" + encodeURIComponent(s(arguments[u])); 
     return new Error(o) 
    } 
} 

function E(e) { 
    if (e == null || z(e)) return !1; 
    var t = e.length; 
    return e.nodeType === 1 && t ? !0 : j(e) || q(e) || t === 0 || typeof t == "number" && t > 0 && t - 1 in e 
} 

function S(e, t, n) { 
    var r; 
    if (e) 
     if (R(e)) 
      for (r in e) r != "prototype" && r != "length" && r != "name" && (!e.hasOwnProperty || e.hasOwnProperty(r)) && t.call(n, e[r], r); 
     else if (q(e) || E(e)) 
     for (r = 0; r < e.length; r++) t.call(n, e[r], r); 
    else if (e.forEach && e.forEach !== S) e.forEach(t, n); 
    else 
     for (r in e) e.hasOwnProperty(r) && t.call(n, e[r], r); 
    return e 
} 

コードがconcatenedと縮小さ、コンパイルされる前に、正常に動作している

誰もが何に上の任意のアドバイスを持っています。この問題を解決するためにやろう?

答えて

0

それはECMAScriのブラウザ固有の実装のニュアンスにのを取得するため、これは厳しいエラーですpt。あなたが興味を持っているなら、ここで簡単な内訳があります:ES5 Strict Mode Requirements

エラーは、本質的に、それはすべきではないどこ関数が宣言されているという事実のために分解します。これはしばしばブラウザによって "処理される"が、ブラウザはこれを手助けするのをやめ、エラーを投げるだけで進む(そしてstrict mode)。これに対する単純な解決策は、関数をローカル変数に代入することなく決して宣言しないことです。 function fn(){...}ではなくlet fn = function(){...}です。同じ関数を使っていますが(例:var a = fn())、変数に割り当てられている変数のスコープに関連付けられています。これにより、他の変数宣言と同じ規則に従うため、理解しやすくデバッグしやすくなります。宣言されるまで宣言されていないので宣言されていません(宣言する前に呼び出さないでください)。スコープ内でのみ使用できます(関数内で宣言すると、その関数内でのみ使用できます)。いつでも上書きまたは変更することができます。

投稿したコードからのエラーが表示されないので、このモジュールのどこかで深刻なことが起こりそうです。あなたは完全なファイルを投稿できますか?

+1

あなたの迅速な答えをいただき、ありがとうございます。 は基本的に私は、JSを清書し、いくつか追加されたコードが実際にif文の内部関数の宣言であることを発見しました。 私はこの厳しい使用の要求に精通していませんでした。特に厳格な使用に慣れていないので、私はこのコードで作業しています。 – Aman

関連する問題