我在Visual Studio中使用Typescript编写了一个AngularJs应用程序。 Typescript将所有文件编译为构建中的单个文件。我们为google闭包编译器添加了一个post-build步骤,以缩小单个文件输出。 --compilation_level参数上的WHITESPACE_ONLY以外的任何选项都会导致应用程序无法初始化。例如my.module.name {}的嵌套模块名称变为function(a){function(a){function(a){when minified。当它在typescript中注入时,这会导致角度错误,最终注入条目是“modulename.classname”引用。 AngularJs无法启动此缩小,因为它变为a.classname。请参阅下面的示例,了解它是如何编写的,以及它是如何缩小的。 myApp位于my.module模块中,控制器位于名为my.module.name的子模块中
myApp.controller("myController", ["$scope", "myService", "myService2", name.myControllerClass]);
如果我们在.ts文件的my.module.name模块中理解myControllerClass是一个写为控制器的类,那么这个工作正常。 (它的所有引用都很好,并且在没有缩小时工作)
当用WHITESPACE_ONLY以外的任何东西缩小时,输出变为:
(function(a){(function(a){var d=angular.module("MyModule",[]);
d.controller("myController", ["$scope", "myService", "myService2", a.myControllerClass]);
angular无法初始化,表示a不包含myControllerClass。这是有意义的,因为在这个例子中将是“my.module”而不是“my.module.name”
之前有没有人遇到这个问题,并且有人知道一个解决方案,允许缩小过去“WHITESPACE_ONLY”,这对我们的情况来说还不够好。它不一定是谷歌闭包编译器正在缩小,但我们的typescripted angularJs应用程序输出的缩小是必要的。对于如何输出其命名空间模块的东西,然后minifier如何解释它,但我不确定,这似乎是一个Typescript缩小问题。
答案 0 :(得分:3)
角度框架提供专业指令,旨在帮助识别Dependency Injection:ng-strict-di
的潜在问题。
只要服务尝试使用隐式注释,严格模式就会抛出错误。
将ng-strict-di
方法添加到引导程序,方法是将其包含在ng-app
(<body ng-app="myApp" ng-strict-di>
)中,或者在手动引导时设置strictDi: true
将启用严格模式。
严格模式不会修改代码并且是安全的。使用严格模式可以识别具有依赖注入的潜在问题区域,这些区域不是最小化安全的。