System.Web.Optimization使函数参数名对于某些函数保持不变

时间:2012-10-23 14:27:15

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

ASP.NET捆绑ScriptBundle

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

转换为

function StartController(n,t,i) {}

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

3 个答案:

答案 0 :(得分:3)

这不是你可以在内置的bundle类型上改变的东西,因为我们目前没有暴露你可以在底层转换类上调整的任何旋钮。实现这一目标的最佳方法是编写自己的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());

答案 1 :(得分:2)

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

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

(我已经包含了一些其他概念)

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

答案 2 :(得分:2)

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

您也可以使用其他角度组件进行类似的操作。