我正在使用ASP.Net捆绑&在AngularJS项目中缩小(System.Web.Optimization
)。
除了一种情况外,一切都很完美。
此时,我们必须eval()
表达。我们知道这并不理想,但目前没有其他解决方案可以满足我们的需求。
所以我们有这一行:
var isValid = eval('globalJson.Permissions.' + attrs.drHasPermissionFor);
现在,因为缩小已更改变量的名称等globalJson
不存在,所以此行失败。
有没有办法指示ASP.Net Minification 不 重命名特定变量?
更新
根据给出的答案 - 我们已经使用Angulars安全的方式进行注射。
使用它的指令如下所示:
appDirectives.directive('drHasPermissionFor', ['globalJson', function (globalJson) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
//code .....
// how can I reference the injected globalJson here - so that i know it's using the
// newly minified name..
var isValid = eval('globalJson.Permissions.' + attrs.drHasPermissionFor);
//more code......
}
};
}]);
答案 0 :(得分:2)
好的 - 所以一位同事想出了解决这个问题的方法。
它并没有真正回答整体"你能告诉优化是否只留下某些变量"问题,虽然它解决了手头的问题。
如果回答最初的问题,我很乐意改变接受的答案。
现在,这可以被黑客攻击:
appDirectives.directive('drHasPermissionFor', ['globalJson', function (globalJson) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
// this function will return the minified globalJson
function returnGlobalJson() {
return globalJson;
};
// call this function as part of the eval - works perfectly :)
var isValid = eval('returnGlobalJson().Permissions.' + attrs.drHasPermissionFor);
}
};
}]);
答案 1 :(得分:1)
Angular有一种以这种方式处理缩小的机制。您必须使用称为内联注释的内容as described here。
这可以通过允许缩小器缩小注释,然后angular将使用注释来确定缩小的变量名称是什么。
因此,您可以只注入要使用的变量并使用缩小变量。
这里也有一篇好文章:
http://thegreenpizza.github.io/2013/05/25/building-minification-safe-angular.js-applications/
答案 2 :(得分:0)
我正在使用BuildBundlerMinifier,由于该功能也已缩小,因此使用该功能的解决方案不起作用。
我使用的解决方案是将变量复制到this
并在评估中使用this.value
,然后再将值复制回变量。
仍然是一种解决方法,但可能会帮助其他人...