2014-12-31 12 views
5

Tôi đã làm việc với Grunt cssmin plugin. Tôi đã có một khối trong Gruntfile của tôi trông giống như thế này:Có cách nào khiến plugin Grunt thất bại nếu thiếu tệp đầu vào không?

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

Trong một thời gian này đã làm việc tốt; nhưng tôi đã chuyển nó sang một máy khác và không thiết lập đúng các thành phần bower của tôi - tệp html5-boilerplate/css/main.css bị thiếu - và nhiệm vụ vẫn hoàn tất thành công. Trong thực tế, tôi có thể đặt các đường dẫn giả hoàn toàn trong mảng đó và việc rút gọn vẫn hoàn thành.

Có cách nào, nói chung, khiến Grunt thất bại và thoát ra nếu tệp bị thiếu trong một mảng như thế này? (Tôi không chắc chắn nếu mảng tập tin là một khái niệm Grunt chung hoặc một được cung cấp bởi cssmin). Nếu không, có cách nào khiến plugin cụ thể này thất bại không?

(Nhân tiện, tôi biết rằng HTML5 Boilerplate có lẽ đã lỗi thời vào những ngày này, nhưng tôi đang trong quá trình di chuyển trang web cũ. Tôi cũng đã khắc phục quy trình cài đặt Bower của mình để nó chạy trước bước này tự động bây giờ. Tôi vẫn muốn hiểu một giải pháp tổng quát hơn cho vấn đề thiếu tập tin, mặc dù).

Trả lời

4

Trong files array format bạn có thể sử dụng nonull: true để nâng cao một cảnh báo nếu một tập tin không tồn tại:

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

Now force Grunt to stop trên một cảnh báo bằng cách gói grunt.log.warn trong chức năng của riêng bạn:

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

Trên sẽ dừng lại trên bất kỳ cảnh báo nào. Nhưng chúng tôi muốn dừng lại nếu tập tin nguồn bị thiếu. Lọc cảnh báo Grunt trên 'Tệp nguồn ... không tìm thấy.':

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

Điều này vẫn không tuyệt vời, vì nó đòi hỏi rất nhiều công việc rõ ràng với chức năng cảnh báo. Nhưng để làm việc quanh hành vi mặc định bị hỏng của Grunt, nó khá tốt - cảm ơn! –

2

Bạn có thể tạo tác vụ đi trướccssmin.

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

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

Và iirc, bạn có thể tái sử dụng các params cùng trong nhiệm vụ cssmin bằng cách chỉ giới thiệu họ qua <% %>.

+0

Cảm ơn, điều này sẽ hiệu quả, nhưng tôi không nghĩ đó là tiền lệ tốt để đặt. Tôi sẽ cần phải lặp lại danh sách các tập tin ở hai nơi (ngay cả với params); và tôi sẽ cần phải tạo một trong những nhiệm vụ này cho mỗi công việc 'thực sự' mà tôi có (Tôi đang tìm một giải pháp tổng quát để làm cho kịch bản của mình mạnh mẽ hơn). –

+2

Đánh dấu phần này là được chấp nhận vì đây là câu trả lời hay nhất cho đến nay. Vẫn sẽ chào đón một giải pháp tổng quát hơn mà không yêu cầu tăng gấp đôi lên mỗi nhiệm vụ ... –

Các vấn đề liên quan