asp.net mvc-Mvc4捆绑、缩小和AngularJS服务



有没有一种方法可以自定义Asp.Net MVC4绑定&缩小功能缩小js文件?

意思是,我不想完全关闭缩小,但"原样"只会破坏AngularJs。

由于AngularJs使用DI和IoC方法在控制器中注入服务,因此:

function MyController($scope) { }

缩小后,变为:

function MyController(n) { }

通常情况下,这不会是问题,但AngularJs使用参数名称来了解要注入的服务。所以$scope应该保持$scope,以及角度控制器中的任何其他参数。其他一切,如局部变量等,都应该正常缩小。

我找不到任何关于如何配置Mvc4缩小的明确文档,而且"要么全有要么全无"似乎很愚蠢,所以我觉得我错过了一些东西。

谢谢。

实际上,您可以(也应该!)编写AngularJS代码,这样它就"缩小安全"了。详细信息请参见http://docs.angularjs.org/guide/di但简而言之,对于全局定义的控制器,你可以写:

MyController.$inject = ['$scope'];

请注意,全局定义的控制器会污染全局命名空间(有关更多详细信息,请参阅此部分),应该避免。如果你在模块级别上声明一个控制器,你也可以使其小型化安全:

angular.module('mymodule', []).controller('MyController', ['$scope', function($scope){
//controller code goes here
}]);

如果你仍然想控制缩小什么和不缩小什么(或者如果你想包括插件供应商已经缩小的版本),只需声明两个捆绑包,并在BundleConfig.cs:上只缩小其中一个

var dontMinify = new Bundle("~/bundles/toNotMinify").Include(
                        "~/Scripts/xxxxx.js");
bundles.Add(dontMinify);
var minify = new Bundle("~/bundles/toNotMinify").Include(
                        "~/Scripts/yyyyyy.js");
minify.Transforms.Add(new JsMinify());
bundles.Add(minify);

对于那些不想/不能编写"minification-safe"角度DI语法,也不在乎变量名被混淆的人,我使用了BundleTransformer和Yui Js minifier-可通过nuget:获得

 Install-Package BundleTransformer.Core
 Install-Package BundleTransformer.Yui

对缩小/混淆提供非常细粒度的控制。在角度世界中,只需将yui-web.config部分中的模糊Javascript设置为false。

最新更新