【问题标题】:Is there a way to prevent some variables being renamed via asp.net System.Web.Optimization有没有办法防止通过 asp.net System.Web.Optimization 重命名某些变量
【发布时间】:2014-09-11 16:53:46
【问题描述】:

我在 AngularJS 项目中使用 ASP.Net 捆绑和缩小 (System.Web.Optimization)。

除了一个场景之外,一切都运行良好。

此时,我们必须eval() 一个表达式。我们知道这并不理想,但目前没有其他解决方案可以满足我们的需求。

所以我们有这一行:

var isValid = eval('globalJson.Permissions.' + attrs.drHasPermissionFor);

现在,因为缩小已经改变了我们变量的名称等globalJson 不存在,所以这条线失败了。

有没有办法指示 ASP.Net Minification重命名特定变量?

更新

根据给出的答案 - 我们已经使用 Angulars 安全的方式进行注入。

使用 this 的指令如下所示:

    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......
            }
        };
    }]);

【问题讨论】:

    标签: c# asp.net bundling-and-minification


    【解决方案1】:

    好的 - 所以一位同事想出了解决这个特定问题的方法。

    虽然它解决了手头的问题,但它并没有真正回答“你能告诉优化不考虑某些变量吗”的整体问题。

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

    目前,这可以像这样被破解:

    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);
    
            }
        };
    }]);
    

    【讨论】:

    • 我有同样的问题,但解决方案没有帮助告诉我,为什么函数也被缩小了。
    • 函数名'returnGlobalJson'没有被缩小;只有变量和参数。因此,您可以安全地针对该名称进行评估。
    • 达人用的是bundle,.NET 4.5,而且bundle是minificando函数,有没有minificar不一样的参数?
    【解决方案2】:

    Angular 有一种以这种方式处理缩小的机制。您必须使用称为内联注释的东西,as described here

    这是通过允许缩小器缩小注释来实现的,然后 Angular 将使用注释来确定缩小后的变量名称是什么。

    因此,您可以只注入您想要使用的变量并使用缩小后的变量。

    这里也有一篇好文章:

    http://thegreenpizza.github.io/2013/05/25/building-minification-safe-angular.js-applications/

    【讨论】:

    • 谢谢。我们已经在 Angular 中使用了缩小安全注入。我的问题不是特别清楚 - 刚刚更新了它:)
    • 55k 你只给出链接答案?惭愧。
    • @MikeSmithDev - 当我最初发布时,问题中没有足够的信息来提供一个与他正在做的事情相匹配的例子,所以我所能做的就是为他提供一般信息自己弄清楚。他后来添加了额外的信息,因为他已经按照我的建议做了,所以没有必要修饰。除了“link only”的意思是“link only”之外,我提供了大量的解释。
    【解决方案3】:

    我正在使用 BuildBundlerMinifier,但使用函数的解决方案不起作用,因为该函数也被缩小了。

    我使用的解决方案是将变量复制到this并在eval中使用this.value,然后将值复制回变量。

    仍然是一种解决方法,但可能对其他人有所帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      相关资源
      最近更新 更多