0

我有一个 Angular.js 应用程序,我想缩小它。

首先,我设置了一个特定的 gulp 管道,以便自动处理注释和缩小。

为了检查隐式注释的工作情况,我使用ngAnnotate添加了注释,然后使用strict-di选项运行应用程序以捕获所有错过的注释。然后我为我发现的所有缺失的注释添加了注释提示。之后,一切正常,ngAnnotate自动注释我的代码并且strict-di没有更多警告。

但是,当我实际使用UglifyJS2缩小我的代码时,它无法启动应用程序,说没有找到某些服务。

这是实际的错误消息:

状态更改错误错误:[$injector:unpr] 未知提供者:tProvider <- t

如果我将mangle: false选项添加到UglifyJS2,它工作正常。

—所以问题是,我如何找到罪魁祸首,为什么strict-di没有抓住它?

4

1 回答 1

0

好的!我终于设法解决了这个问题。

我将在这里发布一个帮助我有效解决它的策略。

战略

我有一个相当大的代码库,一切都在一个 JavaScript 文件中。所有依赖项,第三方的,以及本地的,都在其中声明并与 gulp 插件捆绑在一起。

我做的第一件事是将代码分成两个文件:vendor.jsapplication.js. 我已将所有第三方依赖项移至第一个文件,并将所有本地依赖项留在第二个文件中。之后,我尝试使用application.js缩小和未缩小的方式运行我的应用程序vendor.js。这个简单的技巧帮助我确定问题实际上出在第三方代码上,而不是我的应用程序上。

那时我已经指定了 34 个外部依赖项,所以我再次创建了两个文件vendor.jsvendor-cleared.js并开始将依赖项从第一个文件移到第二个文件中(减半)。这一次,我编译了第二个,而第一个未缩小。经过几次迭代,我发现了一个没有正确注释的有问题的第三方库。

我已修复它,并将所有内容重新组合到我的application.js. 之后,我的应用程序开始完美运行。


我希望这个简单的想法可以帮助您将大型代码库转换为正确注释的代码库并最终缩小它!

之后,只需在添加新依赖项时检查缩小是否正常工作。并且不要忘记始终使用strict-di. 它并不总是有效,但它做得相当好。

于 2016-03-31T19:49:27.500 回答