27

有没有办法自定义 Asp.Net MVC4 捆绑和缩小功能缩小 js 文件的方式?

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

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

function MyController($scope) { }

缩小后,变为:

function MyController(n) { }

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

我找不到任何关于如何配置 Mvc4 缩小的明确文档,而且“全有或全无”似乎相当愚蠢,所以我认为我遗漏了一些东西。

谢谢。

4

3 回答 3

46

实际上,您可以(并且应该!)编写 AngularJS 代码,因此它是“缩小安全的”。详细信息在http://docs.angularjs.org/guide/di的“依赖注释”部分中进行了描述,但简而言之,对于全局定义的控制器,您可以编写:

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

请注意,全局定义的控制器正在污染全局命名空间(有关详细信息,请参阅内容),应避免使用。如果你在模块级别声明一个控制器,你也可以使其缩小安全:

angular.module('mymodule', []).controller('MyController', ['$scope', function($scope){
//controller code goes here
}]);
于 2013-02-16T11:07:04.630 回答
1

如果您仍想控制要缩小的内容和不缩小的内容(或者如果您想包含插件供应商已经缩小的版本),只需声明两个捆绑包,并且只在您的 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);
于 2013-02-16T14:34:20.570 回答
1

对于那些不想/不能编写“缩小安全”的 angular-DI 语法并且不关心变量名被混淆的人,我使用了 BundleTransfomer 和 Yui Js 缩小器 - 可通过核桃:

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

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

于 2014-08-15T09:53:27.233 回答