2015-10-01 22 views
6

Son birkaç saat için gulp kullanarak angular uygulamamı yapmaya/uglify etmeye çalışıyorum, tüm süreci basit bir kontura dönüştürdüm ve hatta açılmış bile başlığında ayrı <script> isteğine concat sürecinden dosya - ve yine aynı hatayı alırsınız:Açısal modül() fabrikası(), concat (gulp) öğesinden sonra bir işlev değil

Yakalanmayan TypeError: angular.module (...) fabrika (...) bir fonksiyon

değildir.

Kontak olmadan her şey yolunda.

Benim yudum görev:

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

O Hata öldürmekle kısa sürede .factory kodda göründüğü gibi happends görünüyor.

Hata ile durduğu satır şu şekildedir - küçültülmüş bir koddur, ancak minimuma uğratmıyorum, şu anda bu dosya kodunun (aslında birincisi) olduğu angular-animate.min da dahil olmak üzere dosyaları dosyayorum.
angular-animate'u kaldırırsam, yoldaki başka bir fabrikada hata atar.

(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... 

GÜNCELLEME: .factory görüşme yaptığı Ah, yanılmışım, bu kısa sürede kırarak değil; işin bitmiş bir parçası olan dosyaya eklenmiş olan en kısa sürede kırılır ...

Herhangi bir çözüm/varsayım duyduğumuz için mutlu oluruz!

cevap

9

Ben onu buldum!
Chrome yanlış bir satıra işaret ediyordu, Firefox bana biraz yardımcı oldu. Hata bana sadece, bir süre sonra angular.module(...).factory(...), .factory undefined değil, tersine, bir fonksiyon olarak fabrika değeri tarafından döndürülen bir işlev olarak değil, .factory(...)() oluyor demektir anladım. Bugün sonunda neyin nedeninin olduğunu anladım. Sağ benim fabrikalarından birinin ardından bazı 3. parti kodu (bu durumda açısal animasyon) vardı ve her zamanki gibi kapanması sarılmış, ancak şeydir concat sonra vardı, benim fabrika sonunda hiçbir ; vardı:

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

Fabrikadaki hattın noktalı virgülle sonlandırılmadığı gerçeğinden dolayı kapatma işlemi etrafındaki kaydırma işlevi işlev çağrısı olarak yorumlandı. Ve bu sorun, bu modül ayrı bir dosyada olduğu gibi, concat olmadan görünmüyordu.

Ders - Bizim adam ; unutmayın;) cevap

+0

Teşekkürler dostum! Muhtemelen birkaç saatimi kurtardı! :) – aup

+0

O kadardı, teşekkürler – afarazit

3

Fabrika kodunuzu görmeden, bağımlılıklarınızı işlevinizden önce almadığınızı varsayıyorum ... Bu geçmişte başıma geldi. SİZİN FABRİKA böyle bir şeydir EMİN OLUN (ve anonim bir işlevde sarılır): minified angularjs Dosyalar için

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

, bunu düzgün küçültmek için sırayla dizeleri olarak bağımlılıkları iddia gerekiyor ... ve denetleyicileri/fabrikaları/hizmetleri anonim işlevlerde sarmak her zaman iyi bir fikirdir. Umarım bu yardımcı olur.

+0

Thx! bir şey, ben bahsettiğim gibi, sadece concat, yani hiçbir minification, ve evet haklı olduğunu iddiaları aşağı sıyrılmış var, ben bu şekilde minimuma sorunları neden olabileceğini farkında, ben irade varsayalım Böyle bir beyanname eklemek için minyatürler önce bazı otomatik hazırlık eklentisi kullanın. Ben şu anda sops hangi fabrika kodu sağlayacaktır. –