有没有一种方法可以防止某些变量通过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......
            }
        };
    }]);

有没有一种方法可以防止某些变量通过asp.net System.Web.Optimization进行重命名

好的,所以一位同事提出了这个特定问题的解决方案。

它并没有真正回答整个"你能告诉优化不要理会某些变量吗"的问题,尽管它解决了手头的问题。

如果最初的问题得到了回答,我很乐意更改已接受的答案。

目前,这可以像这样被黑客入侵:

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,然后将值复制回变量。

仍然是一种变通方法,但可能会帮助其他人。。。