角度模块()。factory()不是concat(gulp)

时间:2015-10-01 18:20:48

标签: angularjs gulp typeerror gulp-concat

在最近几个小时内尝试使用angular连接/ uglify我的gulp应用程序,我已将整个过程拆分为简单的concat,甚至将concat进程中的angular文件删除到单独的{{ 1}}标头中的请求 - 仍然,我收到相同的错误:

未捕获TypeError:angular.module(...)。factory(...)不是函数

没有concat一切都很好。

我的大口任务:

<script>

一旦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

更新:哦,我错了,一旦满足,它就不会破坏;它一旦遇到.factory就会在仲裁文件的缩小部分中断...

很高兴听到任何解决方案/假设!

2 个答案:

答案 0 :(得分:11)

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

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

包装闭包被解释为函数调用,因为工厂的行没有以分号结束。如果没有concat,这个问题就没出现了,因为这个模块是在一个单独的文件中。

课程 - 不要忘记我们的同事;;)

答案 1 :(得分:3)

在没有看到您的工厂代码的情况下,我假设您在功能之前没有声明您的依赖关系...这在过去曾经发生在我身上。请确认你的工厂就像这样(并且它包含在一个匿名函数中):

if not functionA then procedureB

对于Minified AngularJS文件,您需要将依赖项声明为字符串才能正确缩小...并且始终将控制器/工厂/服务包装在匿名函数中总是一个好主意。我希望这会有所帮助。