有没有一种方法可以防止某些变量通过asp.net System.Web.Optimization进行重命名
本文关键字:asp net 变量 System Web 重命名 Optimization 一种 方法 有没有 | 更新日期: 2023-09-27 18:21:30
我正在使用ASP.Net绑定&AngularJS项目中的缩小(System.Web.Optimization
)。
除了一个场景外,一切都很顺利。
这时,我们不得不用eval()
来表达。我们知道这并不理想,尽管目前还没有其他解决方案来满足我们的需求。
所以我们有这条线:
var isValid = eval('globalJson.Permissions.' + attrs.drHasPermissionFor);
现在,由于缩小已经更改了变量的名称等等,globalJson
不存在,所以这一行失败了。
是否有一种方法可以指示ASP.Net Minification而不是重命名特定变量?
更新
根据给出的答案,我们已经用安格拉斯的安全方式注射了。
正在使用的指令如下:
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......
}
};
}]);
好的,所以一位同事提出了这个特定问题的解决方案。
它并没有真正回答整个"你能告诉优化不要理会某些变量吗"的问题,尽管它解决了手头的问题。
如果最初的问题得到了回答,我很乐意更改已接受的答案。
目前,这可以像这样被黑客入侵:
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);
}
};
}]);
Angular有一种以这种方式处理缩小的机制。您必须使用一种叫做内联注释的东西,如这里所述。
这是通过允许缩小程序缩小注释来实现的,然后angular将使用注释来确定缩小的变量名称。
因此,您可以直接注入您想要使用的变量并使用缩小后的变量。
这里还有一篇好文章:
http://thegreenpizza.github.io/2013/05/25/building-minification-safe-angular.js-applications/
我正在使用BuildBundlerMinifier,由于函数也被缩小,因此使用该函数的解决方案不起作用。
我使用的解决方案是将变量复制到this
,并在eval中使用this.value
,然后将值复制回变量。
仍然是一种变通方法,但可能会帮助其他人。。。