【问题标题】:System.Web.Optimization making function argument names stay the same for certain functionsSystem.Web.Optimization 使某些函数的函数参数名称保持不变
【发布时间】:2012-10-23 14:27:15
【问题描述】:

通过 ASP.NET 与 ScriptBundle 捆绑

function StartController($scope, $location, $rootScope) {}

转化为

function StartController(n,t,i) {}

但是,由于我使用的是 AngularJs,为了使依赖注入仍然有效,缩小时不得更改参数名称。如何确保 $scope、$location 和 $rootScope 通过 ScriptBundle 保持这些名称的缩小,但允许在其他地方重命名参数?

【问题讨论】:

    标签: asp.net-mvc asp.net-optimization


    【解决方案1】:

    这不是您可以在内置包类型上更改的内容,因为我们目前没有公开任何您可以在底层转换类上调整的旋钮。实现这一点的最佳方法是编写自己的 IBundleTransform,它会在适当的设置中进行缩小而不重命名变量。

    即类似:

    public class CustomTransform : IBundleTransform {
        public void process(BundleContext context, BundleResponse response) {
             response.Content = MyMinifier.MinifyWithoutRename(response.Content);
        }
    }
    
    BundleTable.Bundles.Add(new Bundle("~/bundles/mybundle", new CustomTransform());
    

    【讨论】:

    • 事实证明 Angular 有其他表示法允许他们的 DI 使用压缩器 docs.angularjs.org/guide/di
    • 这仍然适用吗? MyMinifier 是什么?
    【解决方案2】:

    这适用于System.Web.Optimizations nuget 包 1.1

    https://gist.github.com/zaus/7436601

    (我在此过程中还包含了一些其他概念)

    基本上,您需要编写一个新的 BundleTransform/Minifier 来公开 CodeSettings,以便您可以更改 NoAutoRenameCollection

    【讨论】:

      【解决方案3】:

      Angular 提供了一种处理缩小的方法。如果您正在定义一个控制器,您可以将代码重写为:

      YOUR_APP_MODULE.controller('CONTROLLER_NAME', ['$scope', '$location', '$rootScope', function($scope, $location, $rootScope){
          // DO STUFF
      }]);
      

      在缩小时,这将变为:

      YOUR_APP_MODULE.controller('CONTROLLER_NAME', ['$scope', '$location', '$rootScope', function(n, t, i){
      }]);
      

      你也可以用其他角度组件做类似的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-30
        • 2021-10-31
        • 2016-04-27
        • 1970-01-01
        • 1970-01-01
        • 2018-10-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多