在最近几个小时内尝试使用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就会在仲裁文件的缩小部分中断...
很高兴听到任何解决方案/假设!
答案 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文件,您需要将依赖项声明为字符串才能正确缩小...并且始终将控制器/工厂/服务包装在匿名函数中总是一个好主意。我希望这会有所帮助。