【问题标题】:AngularJS not working in release mode (minified)AngularJS 在发布模式下不工作(缩小)
【发布时间】:2014-03-27 01:17:36
【问题描述】:

我在一个项目中有 AngularJS 和 Bootstrap 的 Angular 指令,这两个指令都是通过 Nuget 添加的。

compilation debug="true" 时,一切正常,但是一旦我将 compilation debug 更改为 false,Angular 就会停止工作,并且我在 Chrome 的控制台中收到以下错误:

Error: [$injector:unpr] http://errors.angularjs.org/1.2.15/$injector/unpr?p0=nProvider%20%3C-%20n
at Error (native)
at http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:448
at http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:14726
at Object.i [as get] (http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:13802)
at http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:14801
at i (http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:13802)
at r (http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:14014)
at Object.instantiate (http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:14185)
at http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:30669
at http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:23558 angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1
(anonymous function) angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1

我所有的其他 Javascript/CSS 都按预期工作。一旦缩小,什么可能导致 Angular 停止工作?这是一个已知问题吗?

谢谢

【问题讨论】:

    标签: asp.net-mvc angularjs bundling-and-minification


    【解决方案1】:

    compilation debug 值设置为"false" 时,ASP.NET MVC minifies javascript 文件。 angular tutorial 包含此关于缩小的说明:

    由于 Angular 从参数名称推断控制器的依赖关系到控制器的构造函数,如果你要缩小 [你的] 控制器的 JavaScript 代码,它的所有函数参数也会被缩小,并且依赖注入器会无法正确识别服务。

    解决这个问题的最常用技术是内联括号表示法,例如:

    phonecatApp.controller('PhoneListCtrl', ['$scope', '$http', function($scope, $http) {...}]);
    

    这个 SO 问题解释了缩小安全语法的重要性:Angularjs minify best practice

    【讨论】:

    • 如果您不想手动注释代码,也可以使用 ngAnnotate,前提是您的构建系统提供了一种集成 ngAnnotate 的方法。
    猜你喜欢
    • 2018-10-23
    • 2022-06-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2018-07-31
    相关资源
    最近更新 更多