2014-12-31 8 views
5

Pracowałem z Grunt cssmin plugin. Miałem blok w mojej Gruntfile, który wygląda mniej więcej tak:Czy istnieje sposób, aby spowodować błąd wtyczki Grunt, jeśli brakuje plików wejściowych?

cssmin: { 
    target: { 
     files: { 
      '<%= config.target %>/mytarget.css': [ 
       'bower_components/normalize.css/*.css', 
       'bower_components/html5-boilerplate/css/main.css', 
       '<%= config.src %>/css/*.css' 
      ] 
     } 
    } 
} 

Przez chwilę to działało dobrze; ale przeniosłem to na inną maszynę i nie ustawiłem poprawnie elementów altanowania - brakowało pliku html5-boilerplate/css/main.css - a mimo to zadanie zostało pomyślnie zakończone. W rzeczywistości mogę umieścić całkowicie fałszywe ścieżki w tej macierzy, a minifikacja wciąż się kończy.

Czy istnieje sposób, ogólnie, aby spowodować, że Grunt zawiedzie i zakończy pracę, jeśli brakuje plików z takiej tablicy? (Nie jestem pewien, czy tablica plików jest ogólnym pojęciem Grunta, czy też dostarczonym przez cssmin). Jeśli nie, czy istnieje sposób na niepowodzenie tej konkretnej wtyczki?

(Nawiasem mówiąc, jestem świadomy, że HTML5 Boilerplate jest prawdopodobnie trochę staroświecki, ale jestem w trakcie migracji starej witryny. Naprawiłem również proces instalacji Bower, aby był uruchamiany przed ten krok automatycznie teraz. Nadal chciałbym zrozumieć bardziej ogólne rozwiązanie problemu brakujących plików).

Odpowiedz

4

W files array format można użyć nonull: true podnieść ostrzeżenie, jeśli plik nie istnieje:

files: [ 
    { 
    src: [ 
     'a.js', 
     'b.js', 
    ], 
    dest: 'c.js', 
    nonull: true 
    } 
] 

Now force Grunt to stop na ostrzeżenia owijając grunt.log.warn w swoim własnym funkcję:

var gruntLogWarn = grunt.log.warn; 
grunt.log.warn = function(error) { 
    gruntLogWarn(error); // The original warning. 
    grunt.fail.warn('Stop! Hammer time.'); // Forced stop. 
}; 

Above zatrzyma się przy każdym ostrzeżeniu. Ale chcemy się zatrzymać, jeśli brakuje plików źródłowych. Filtruj ostrzeżenia Grunt na "Plik źródłowy ... nie znaleziono":

var gruntLogWarn = grunt.log.warn; 
grunt.log.warn = function(error) { 
    var pattern = new RegExp("^Source file (.*) not found.$"); 
    if (pattern.test(error)) { 
    grunt.fail.warn(error); 
    } else { 
    gruntLogWarn(error); 
    } 
}; 
+0

To wciąż nie jest świetne, ponieważ wymaga wiele jawnej pracy z funkcją ostrzegania. Ale do pracy nad złamanym domyślnym zachowaniem Grunta, jest całkiem niezły - dzięki! –

2

Można utworzyć zadanie o numerze przedcssmin.

grunt.task.registerTask('checkIfFilesExist','',function(){ 
    // Check for those files here. Throw if something's wrong. 
}); 

grunt.task.registerTask('checkBeforeDoingStuff',[ 
    'checkIfFilesExist', 
    'cssmin' 
]); 

I IIRC, można ponownie użyć tych samych params w zadaniu cssmin po prostu odnosząc je poprzez <% %>.

+0

Dzięki, to zadziała, ale nie sądzę, że to dobry precedens do ustawienia. Będę musiał powtórzyć listę plików w dwóch miejscach (nawet z parametrami); i będę musiał utworzyć jedno z tych zadań dla każdego z "prawdziwych" zadań, które mam (szukam uogólnionego rozwiązania, aby mój skrypt był bardziej wytrzymały). –

+2

Oznaczanie jako zaakceptowane, ponieważ jest to jak dotąd najlepsza odpowiedź. Nadal będziemy wdzięczni za bardziej ogólne rozwiązanie, które nie wymaga podwojenia każdego zadania ... –

Powiązane problemy