2014-12-31 17 views
5

Grunt cssmin plugin ile çalışıyorum. Böyle yaklaşık görünüyor benim Gruntfile bir blok vardı: bu güzel çalışıyordu Bir süreGiriş dosyaları eksikse Grunt eklentisinin başarısız olmasına yol açmanın bir yolu var mı?

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

; ama bunu başka bir makineye taşıdım ve bower bileşenlerini doğru şekilde ayarlamadım - html5-boilerplate/css/main.css dosyası eksikti - ve yine de görev hala başarıyla tamamlandı. Aslında, bu diziye tamamen sahte yollar koyabilirim ve minifikasyon hala tamamlanır.

Genel olarak numaralı yolunda, Grunt'ın bu gibi bir diziden eksik olması durumunda başarısız olmasına ve çıkmasına neden olmak için bir yol var mı? (Dosya dizisinin genel bir Grunt kavramı mı yoksa cssmin tarafından sağlanan mı olduğundan emin değilim). Değilse, bu özel eklentinin başarısız olmasına neden olacak bir yol var mı?

(Bu arada, bu günlerde muhtemelen HTML5 Boilerplate'un biraz eski moda olduğunun farkındayım, ancak eski bir siteyi taşıma işlemindeyim. Ayrıca Bower yükleme işlemini de daha önce çalıştırılacak şekilde düzelttim. Bu adım otomatik olarak şimdi. Yine de eksik dosya sorununa daha genel bir çözüm bulmak isterdim).

cevap

4

files array format bir dosya yoksa bir uyarı yükseltmek için nonull: true kullanabilirsiniz:

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

Above:

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

Now force Grunt to stop bir uyarı kendi işlevinde grunt.log.warn sararak herhangi bir uyarıyı durduracak. Ama kaynak dosyaları eksikse durdurmak istiyoruz. 'Kaynak dosya ...' konusundaki Grunt uyarılarını filtrele. ':

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

Bu hala çok iyi değil, çünkü bu uyarı fonksiyonuyla çok açık bir çalışma gerektiriyor. Ancak Grunt'ın kırık varsayılan davranışı etrafında çalışmak için oldukça iyi - teşekkürler! –

2

cssmin'dan önce numarasına giden bir görev oluşturabilirsiniz.

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

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

Ve iirc, sadece <% %> aracılığıyla onları başvurarak cssmin görev aynı params yeniden başladı. Gelen

+0

Teşekkürler, bu işe yarayacak, ancak bunun iyi bir örnek olduğunu sanmıyorum. Dosya listesini iki yerde tekrarlamalıyım (param ile bile); ve sahip olduğum 'gerçek' görevlerin her biri için bu görevlerden birini oluşturmam gerekecek (komutumu daha güçlü yapmak için genelleştirilmiş bir çözüm arıyorum). –

+2

Bunu kabul edildi olarak işaretleme, bugüne kadarki en iyi cevap. Her görevi ikiye katlamayı gerektirmeyen daha genelleştirilmiş bir çözümü hala memnuniyetle karşılıyoruz ... –

İlgili konular