2016-04-13 55 views
0

'da "kullanımdan kaldır" hatası verir. Bu yüzden, modüler hale getirmek için RequireJS kullanan oldukça kapsamlı bir AngularJS uygulamasını ve kodu derlemek ve minimize etmek için Grunt (RequireJS optimizer eklentisi) kullanır.RequireJS ile AngularJS uygulaması, Safari ve Firefox

: küçültülmüş kod bana Firefox'ta aşağıdaki hatayı veriyor

:

Ve Safari'de "SyntaxError katı mod kodunda, fonksiyonlar sadece üst seviyesinde veya hemen başka işlev içinde bildirilen edilebilir" :

"SyntaxError:. düzey modu bir lexically iç içe açıklamada işlev açıklamalarını izin vermez" İşte

kodunun ilk bölümüdür.

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 
} 

"

kodu derlenmiş concatened ve minified önce çalışıyor

Herkes ne üzerinde herhangi bir tavsiye var o ECMAScri tarayıcı belirli uygulamaların nüans içine s olsun, çünkü bu zor bir hatadır

cevap

0

? bunu düzeltmek için yapmaya çalışacağız nk. Eğer ilgileniyorsanız hızlı bir dökümü: ES5 Strict Mode Requirements.

hata aslında bu olmamalı nerede bir işlev ilan ediliyor olmasından ayırır. Bu genellikle tarayıcı tarafından sadece "işlenir", ancak ileriye doğru ilerler (ve strict mode) tarayıcı bu konuda yardımcı olmayı durduracak ve bir hata atacaktır. Bunun basit çözümü, hiçbir zaman bir yerel değişkene atamadan bir işlevi bildirmek değildir. function fn(){...} yerine let fn = function(){...}. Yine de işlevi [ex: var a = fn()] kullanırsınız, ancak şimdi atadığınız değişkenin kapsamına bağlıdır. Bu, diğer değişken bildirimlerle aynı kuralları izlediği için kavramanın ve hata ayıklamanın daha kolay olmasını sağlar. Tanımlanıncaya dek tanımlanmamıştır (bu yüzden bildirilmeden önce onu çağırmayın), yalnızca kapsamı içinde kullanılabilir (eğer bir işlev içinde bildirirseniz, yalnızca bu işlev içinde kullanılabilir) ve Herhangi bir zamanda üzerine yazılmalıdır.

hatası görmüyorum Yayınladığınız koddan atılan, bu yüzden muhtemelen bir yere derin aşağı bu modülde gerçekleşiyor. Tam dosyayı gönderebilecek misiniz?

+1

Hızlı cevabınız için teşekkür ederiz. Temelde ben js prettified ve bazı ilave kod eğer deyimi içinde gerçekten işlev bildirimleri olduğunu keşfetti. Ben sıkı ve üzerinde çalışıyorum bu başkasının kodunu kullanarak o kullanılan değilim, özellikle de kullanım sıkı bu talebe aşina değildi. – Aman