【发布时间】:2016-08-04 20:46:24
【问题描述】:
所以我已经超越了一个非常全面的 AngularJS 应用程序,它使用 RequireJS 进行模块化,还使用 Grunt(RequireJS 优化器插件)编译代码并缩小它。
缩小的代码在 Firefox 中给我以下错误:
“SyntaxError:在严格模式代码中,函数只能在顶层或直接在另一个函数中声明”
在 Safari 中:
“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
}
"
代码在编译、连接和缩小之前运行良好。
有人对如何解决这个问题有任何建议吗?
【问题讨论】:
标签: javascript angularjs gruntjs requirejs