2013-06-09 61 views
17

Tôi có một dự án với một số thư mục con chứa các tệp JavaScript mà tôi muốn ghép nối. những gì sẽ là đúng cách để cấu hình chúng?Ánh xạ động cho các điểm đến trong grunt.js

ví dụ:

nguồn: /modules/$modulename/js/*.js (nhiều file) dest: /modules/$modulename/js/compiled.js

Vì vậy, những gì tôi muốn làm là để biên dịch js- các tệp của một số lượng không xác định/chưa được định cấu hình của các thư mục con ($ modulename) thành một tệp cho mỗi thư mục con.

Điều này có khả thi không?


Chức năng sau đây (được xây dựng sau khi hướng dẫn hereandnow78 của) không được công việc:

grunt.registerTask('preparemodulejs', 'iterates over all module directories and compiles modules js files', function() { 

    // read all subdirectories from your modules folder 
    grunt.file.expand('./modules/*').forEach(function(dir){ 

     // get the current concat config 
     var concat = grunt.config.get('concat') || {}; 

     // set the config for this modulename-directory 
     concat[dir] = { 
      src: [dir + '/js/*.js', '!' + dir + '/js/compiled.js'], 
      dest: dir + '/js/compiled.js' 
     }; 

     // save the new concat config 
     grunt.config.set('concat', concat); 

    }); 

}); 

sau đó tôi đặt preparemodulejs trước khi công việc concat trong cấu hình mặc định của tôi.

Trả lời

32

bạn có thể cần phải mã tác vụ của riêng mình, nơi bạn lặp qua các thư mục con của mình và tự động thêm vào cấu hình concat của bạn.

grunt.registerTask("your-task-name", "your description", function() { 

    // read all subdirectories from your modules folder 
    grunt.file.expand("./modules/*").forEach(function (dir) { 

    // get the current concat config 
    var concat = grunt.config.get('concat') || {}; 

    // set the config for this modulename-directory 
    concat[dir] = { 
    src: ['/modules/' + dir + '/js/*.js', '!/modules/' + dir + '/js/compiled.js'], 
    dest: '/modules/' + dir + '/js/compiled.js' 
    }; 

    // save the new concat configuration 
    grunt.config.set('concat', concat); 
    }); 
    // when finished run the concatinations 
    grunt.task.run('concat'); 
}); 

chạy này với:

$ grunt your-task-name 

mã này là chưa được kiểm tra, nhưng tôi nghĩ rằng nó nên làm việc của bạn.

GỢI Ý: bạn có thể đặt mã này vào một tệp bên ngoài và bao gồm trong gruntfile của bạn nếu bạn muốn giữ cho tệp grunt của bạn nhỏ, ví dụ: đặt này vào một tập tin bên trong một nhiệm vụ thư mục:

module.exports = function(grunt) { 
    grunt.registerTask("your-task-name", "your description", function() { 
    ... 
    }); 
}; 

và tải ở trong gruntfile của bạn:

grunt.loadTasks("./tasks"); 
+0

@ hereannow78 phương pháp này là rất tốt, tôi hoàn toàn quên rằng tôi có thể đọc trong cấu trúc file. tôi sẽ đặt một cập nhật vào câu hỏi mà chức năng hoạt động. – Patrick

+0

+1 để đề xuất thư mục 'tác vụ'. Có quá nhiều Gruntfiles cồng kềnh ngoài kia. – ZenMaster

+0

Điều này khá cũ, có cách nào để loại trừ các thư mục khỏi thư mục mẹ không? – pcnate

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