Angular module().factory() 不是 concat 之后的函数 (gulp)

Angular module().factory() is not a function after concat (gulp)

在过去的几个小时里,我尝试使用 gulp concat/uglify 我的 angular 应用程序,我已将整个过程简化为简单的连接,甚至删除了 angular 文件从 concat 进程到 header 中的单独 <script> 请求 - 我仍然收到相同的错误:

未捕获类型错误:angular.module(...).factory(...) 不是函数

没有 concat 一切都很好。

我的gulp任务:

gulp.task('JS', function() {
  gulp.src(['!_dependencies/angular.min.js', '_dependencies/jquery.min.js', '_dependencies/moment.min.js', 'Alpha/_lilhelpers.js', 'Alpha/routes.js' , '!trainerreg.js', '**/*.js'], {cwd: './public/scripts'})         
    .pipe(concat('concat.js'))    
    .pipe(gulp.dest('./public/min'));
});

似乎只要 .factory 出现在代码中,错误基本上就会发生。

这是它当前因错误而停止的行 - 这是一个缩小的代码,但我没有缩小它,我现在只是连接文件,包括 angular-animate.min 这行代码(第一个实际上是一个)。
如果我删除 angular-animate,它只会在另一个即将到来的工厂上抛出错误。

(function(N,f,W){'use strict';f.module("ngAnimate",["ng"]).directive("ngAnimateChildren",function(){return function(X,r,g){g=g.ngAnimateChildren;f.isString(g)&&0===g.length?r.data("$$ngAnimateChildren",!0):X.$watch(g,function(f){r.data("$$ngAnimateChildren",!!f)})}}).factory("$$animateReflow",["$$rAF","$document",function(f,r){var g=r[0].body;return function(r){return f(function(){r(g.offsetWidth)})}}]).config...

UPDATE:哦,我错了,.factory 一遇到就没有坏;它在连接文件的缩小部分遇到 .factory 后立即中断...

很高兴听到任何 solutions/assumptions!

在没有看到你的工厂代码的情况下,我假设你没有在你的函数之前声明你的依赖关系......这在过去发生在我身上。确保你的工厂是这样的(并且它被包裹在一个匿名函数中):

 (function(){
  angular.module('yourModule')
    .factory('YourFactory', ["$scope", "$state", function ($scope, $state){
       //Your Code
    }]);
  }());

对于缩小的 AngularJS 文件,您需要声明您的依赖项为字符串,以便它正确地缩小...并且将您的 controllers/factories/services 包装在匿名函数中始终是个好主意。希望对您有所帮助。

找到了!
Chrome 指向错误的行,Firefox 帮了我一点忙。错误本身让我感到困惑,过了一段时间我才明白 angular.module(...).factory(...) 并不意味着 .factory 未定义,而是试图调用工厂值作为函数返回的东西,即 .factory(...)() 正在发生。今天终于知道是什么原因了。 在我的一个工厂之后有一些第 3 方代码(在这种情况下是 angular 动画)并且它像往常一样被包裹在闭包中,但事实是,我的工厂最后没有 ; 所以在 concat 之后我有:

.factory('fact', function(){my-factory-code}) (function(args){3rd-party-code})()

环绕闭包被解释为函数调用,因为 factory 行没有以分号终止。如果没有 concat,这个问题就不会出现,因为这个模块在一个单独的文件中。

教训 - 不要忘记我们的伙伴 ; ;)