2013-05-23 26 views
23

Tôi có một Gruntfile trong thư mục gốc của dự án của tôi. Tôi cũng đã cài đặt jQuery qua Bower trong thư mục app/components/jquery.Chạy một tác vụ grunt trên một Gruntfile từ một số khác

Là một phần của Gruntfile, tôi muốn chạy một số lệnh trên jQuery Gruntfile để xây dựng một phiên bản tùy chỉnh của thư viện.

Tôi có thể lấy Gruntfile của mình bằng cách nào?

Trả lời

29

Bạn có thể tạo một nhiệm vụ đơn giản mà spawns grunt trong thư mục bạn muốn:

grunt.registerTask('run-grunt', function() { 
    var done = this.async(); 
    grunt.util.spawn({ 
     grunt: true, 
     args: [''], 
     opts: { 
      cwd: 'app/components/jquery' 
     } 
    }, function (err, result, code) { 
     done(); 
    }); 
}); 
+2

này hầu như làm việc .... gì sẽ là cần thiết cho điều này để hiển thị đầu ra từ nhiệm vụ. Hãy nói rằng tôi có một nghiệp vụ: đơn vị chạy thử nghiệm đơn vị của tôi với 'watch: true'. Tôi muốn có thể chạy nó và xem đầu ra trên màn hình. –

0

không biết điều đó có hiệu quả hay không, nhưng bạn có thể thử. jQuery Gruntfile của bạn được xuất qua "module.exports". điều đó có nghĩa là bạn có thể yêu cầu nó trong mã của bạn và sử dụng nó.

var jQueryGrunt = require('path-to-jquery-gruntfile'); 
jQueryGrunt.task.run(['your-task-you-want-to-run']); 

sẽ rất thú vị để nghe nếu mà làm việc ...

16

Nếu bạn muốn để có được giao diện điều khiển đầu ra , xây dựng trên câu trả lời của @ Sindre, tất cả những gì bạn phải làm là giao diện điều khiển đăng nhập result.stdout.

grunt.registerTask('run-grunt', function() { 
    var cb = this.async(); 
    grunt.util.spawn({ 
     grunt: true, 
     args: ['clean', 'copy:fonts'], 
     opts: { 
      cwd: 'bower_components/bootstrap' 
     } 
    }, function(error, result, code) { 
     console.log(result.stdout); 
     cb(); 
    }); 
}); 
+1

Hoạt động hoàn hảo, mặc dù tất nhiên đầu ra được đệm. – LeeGee

11

Dựa trên @ Sindre và @ trả lời Stephen, chúng tôi cũng có thể nhận được các giao diện điều khiển đầu ra "trong thời gian thực" mà không bị đệm:

grunt.registerTask('run-grunt', function() { 
    var cb = this.async(); 
    var child = grunt.util.spawn({ 
     grunt: true, 
     args: ['clean', 'copy:fonts'], 
     opts: { 
      cwd: 'bower_components/bootstrap' 
     } 
    }, function(error, result, code) { 
     cb(); 
    }); 

    child.stdout.pipe(process.stdout); 
    child.stderr.pipe(process.stderr); 
}); 
+0

Hoạt động tốt, cũng trong Visual Studio Task Runner Explorer. Bây giờ tôi có thể chạy các tác vụ từ gruntfile Bootstrap thông qua một gruntfile trong thư mục gốc của dự án (cần thiết cho Task Runner Explorer) – ArieKanarie

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