【问题标题】:How to minify famous.angular without DI errors?如何在没有 DI 错误的情况下缩小 Famous.angular?
【发布时间】:2014-09-03 13:03:15
【问题描述】:

我在缩小时遇到了一些著名的角度问题。

我昨天提交的几个 PR 试图解决这个问题,但这些似乎没有解决问题。

如果在没有缩小的情况下构建,一切都会按预期工作。

当使用缩小构建,但从我的应用模块中删除对“着名.angular”的依赖时, 应用程序优雅地降级为仅 angular,因此布局很糟糕,但底层 angular 应用程序按预期工作,没有错误。

当使用缩小构建时,应用模块依赖于“着名的.angular”, 该应用程序根本无法加载,并出现以下错误:

Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to:
Error: [$injector:modulerr] Failed to instantiate module famous.angular due to:
Error: [$injector:unpr] Unknown provider: t
http://errors.angularjs.org/1.2.23/$injector/u...<omitted>...2)

通过使用this method, 我能够确定哪个函数没有正确缩小, 并触发 Angular 的依赖注入:

function LocationHashbangInHtml5Url(appBase, hashPrefix) { /* ... */ }

这是在核心 Angular 文件中 - angular.js, 它确实在其他情况下正确缩小。 所以我不知道为什么当我在我的应用程序模块中包含“着名的.angular”时, 这引入了错误。

有人知道这里有什么问题吗?


问题演示:

git clone git@github.com:bguiz/browserify-gulp-starter.git
cd browserify-gulp-starter
npm install famous
bower install --save angular angular-route famous-angular
# edit gulpoptions.js
# appName: 'app',
# appFolder: './src-famousangular/app/',
gulp serve-dist

【问题讨论】:

  • 是否与本帖有关[this][1] [1]:stackoverflow.com/questions/18782324/…
  • @SridharChidurala 是的,确实与 DI 有关。仅供参考,我在我的应用程序代码上使用ng-annotatefamous.angular 似乎不需要它,因为它的功能被适当地包装了。这是我一直想不通的。
  • 从 Sridhar 提供的链接中找到 ng-annotate。
  • @Noypi 我已经在使用 ng-annotate。无论如何,我手头有solved 的问题。原来是著名的角度代码中的一个错误,我刚刚提交了一个补丁。

标签: javascript angularjs famo.us famous-angular


【解决方案1】:

我之前将这两个 PR 提交给了 Famous-Angular,以为我已经抓住了所有 $inject 场景:

原来我错过了第三个,现在已经提交了一个补丁:

在我上面的问题中,我说angular/angular.js 中的function LocationHashbangInHtml5Url(appBase, hashPrefix) { /* ... */ } 是没有正确缩小的函数。 这是不正确,罪魁祸首实际上是famous-angular/src/scripts/directives/fa-input.js 中的提供者。


出于好奇,这是我用来解决上述问题的过程。 作为额外的奖励,我碰巧发现了一种额外的技术,可以在调试缩小的 AngularJs 应用程序中的依赖注入错误时使用。

事实证明,我在上面链接到的技术 (https://stackoverflow.com/a/25126490/194982)并不总是正常工作。

最终起作用的是向上遍历执行堆栈,直到我们到达invoke() 函数,如该技术中所述。然后,不要只检查 fn,而是查看开发人员工具中的 Scope Variables 选项卡,并检查作为函数的每个作用域成员。

这会撒下更大的网,导致需要检查的东西更多; 但在这种情况下是必要的,我怀疑可能适用于其他情况。

【讨论】:

    猜你喜欢
    • 2019-12-30
    • 2011-08-28
    • 1970-01-01
    • 2019-04-13
    • 2013-07-21
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多