2015-10-01 13 views
6

Próbujesz konkatować/zgnieść moją aplikację angular przy użyciu gulp przez ostatnie kilka godzin, rozebrałem cały proces na prosty konkat, a nawet usunięto Dane z procesu concat do oddzielnego <script> życzenie w nagłówku - i wciąż otrzymuję ten sam błąd:Moduł kątowy(). Fabryka() nie jest funkcją po concat (gulp)

Uncaught błąd typu: angular.module (...) fabryki (...) nie jest funkcją

.

Bez konkatentu wszystko jest w porządku.

Moim zadaniem łyk:

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')); 
}); 

Wydaje się, że basicaly Błąd happends jak najszybciej .factory pojawia się w kodzie.

Oto linia, na której aktualnie kończy się z błędem - jest to minified kod, ale nie jestem minizing to, im właśnie pliki, które właśnie teraz, w tym angular-animate.min, z którego ten wiersz kodu (pierwszy w rzeczywistości).
A jeśli usuniemy angular-animate, spowoduje to tylko błąd w innej fabryce, która będzie w drodze.

(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: Oh, byłem w błędzie, to nie tak szybko, jak łamanie Fabryce umiejscowionej spełnione; rozrywa się, gdy tylko znajdzie się w fazie zminiaturyzowanej części pliku ...

Z przyjemnością wysłuchamy wszelkich rozwiązań/założeń!

Odpowiedz

9

Znalazłem to!
Chrome wskazywał nieprawidłową linię, Firefox pomógł mi trochę. Sam błąd mnie zdezorientował, dopiero po jakimś czasie zrozumiałem, że angular.module(...).factory(...) nie jest niezdefiniowane, ale raczej, że dzieje się coś, co próbuje wywołać zwróconą przez fabrykę wartość w funkcji tj. .factory(...)(). Dzisiaj w końcu zorientowałem się, co było przyczyną. Zaraz po jednej z moich fabryk znalazł się jakiś kod trzeciej strony (w tym przypadku animacja kątowa) i został on zapakowany w zwykły sposób, ale chodzi o to, że moja fabryka nie miała na końcu ;, więc po konkatii miałem:

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

Zawijanie wokół zamknięcia zostało zinterpretowane jako wywołanie funkcji z powodu faktu, że linia z fabryką nie została zakończona średnikiem. I ten problem nie pojawił się bez konkatencji, ponieważ ten moduł był w osobnym pliku.

Lekcja - nie zapomnij o naszym kolegom ;;)

+0

Dzięki kolego! Prawdopodobnie uratował mnie kilka godzin! :) – aup

+0

To wszystko, dziękuję – afarazit

3

Nie widząc twojego kodu fabrycznego, zakładam, że nie ubiegałeś się o swoje zależności przed funkcją ... To mi się przydarzyło w przeszłości. UPEWNIJ SIĘ, ŻE FACTORY jest mniej więcej tak (i ​​to jest owinięty w anonimowej funkcji):

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

Dla minified angularjs Files, trzeba zastrzeżenia swoich zależności jako ciągi, aby mogła ona właściwie minify ... i zawsze jest dobrym pomysłem na zawijanie kontrolerów/fabryk/usług w anonimowe funkcje. Mam nadzieję, że to pomoże.

+0

Thx za odpowiedź! rzeczą jest, jak już wspomniałem, rozebrałem procenty tylko na konkatencję, tj. Bez zminimalizowania, i tak masz rację, nie twierdząc, że w ten sposób są uzależnione, teraz wiem, że może to powodować problemy z minifikacjami, przypuszczam, że będę używaj zautomatyzowanej wtyczki do przygotowywania minifikacji, aby dodać taką deklarację. Dostarczę kod fabryczny, na którym aktualnie znajduje się kopia zapasowa. –