2013-05-15 41 views
15

Tôi muốn tạo và chạy tác vụ grunt trong mã node.js để sử dụng thử nghiệm.Chạy tác vụ grunt với api, không có dòng lệnh

var foo = function() { 
    var grunt = require("grunt"); 

    var options = {"blahblah": null} // ...creating dynamic grunt options, such as concat and jshint 
    grunt.initConfig(options); 
    grunt.registerTask('default', [/*grunt subtasks*/]); 
} 

Nhưng điều này không hiệu quả. Grunt dường như không chạy bất kỳ nhiệm vụ nào. Tôi gần như chắc chắn rằng có một số API để chạy nhiệm vụ grunt bên ngoài mà không có dòng lệnh, nhưng không biết làm thế nào để làm điều đó.

Có cách nào để làm điều đó không?

Trả lời

20

Bạn có thể. Tôi không biết tại sao bất cứ ai sẽ cần phải làm điều này như hiện nay Grunt là một công cụ dòng lệnh . CẢNH BÁO: Tôi không khuyên bạn nên chạy Grunt theo cách này. Nhưng ở đây nó là:

var grunt = require('grunt'); 

// hack to avoid loading a Gruntfile 
// You can skip this and just use a Gruntfile instead 
grunt.task.init = function() {}; 

// Init config 
grunt.initConfig({ 
    jshint: { 
    all: ['index.js'] 
    } 
}); 

// Register your own tasks 
grunt.registerTask('mytask', function() { 
    grunt.log.write('Ran my task.'); 
}); 

// Load tasks from npm 
grunt.loadNpmTasks('grunt-contrib-jshint'); 

// Finally run the tasks, with options and a callback when we're done 
grunt.tasks(['mytask', 'jshint'], {}, function() { 
    grunt.log.ok('Done running tasks.'); 
}); 
+1

Nó hoạt động. Cảm ơn nhiều. Tôi muốn chạy Grunt động để thiết lập một số môi trường thử nghiệm dựa trên web. Để đạt được nó, tôi cần chạy Grunt trong mã nodeJS, hoặc sử dụng lệnh exec() - để tạo lệnh CLI của Grunt. Tôi nghĩ rằng trước đây là tự nhiên hơn. – Kivol

+6

Tôi thường sử dụng 'grunt.util.spawn ({grunt: true, args: ['taskname']}, hàm() {})' để kiểm tra theo cách đó. Nó sinh ra Grunt chặt chẽ hơn với cách người dùng chạy Grunt. –

+0

Cảm ơn! Tôi sẽ thử theo cách đó. – Kivol

13

Bạn có thể lấy cảm hứng về cách chạy grunt từ mã bằng cách nhìn vào grunt-cli mà thực hiện điều này và đó là một dự án được duy trì bởi các folks grunt.

Grunt được khởi chạy từ mã số grunt-cli/bin/grunt và bạn có thể đọc thêm về các tùy chọn trong grunt/lib/grunt/cli.js.

tôi sử dụng nó trong một dự án cá nhân như thế này:

var grunt = require("grunt"); 
grunt.cli({ 
    gruntfile: __dirname + "/path/to/someGruntfile.js", 
    extra: {key: "value"} 
}); 

Mấu chốt "thêm" sẽ có sẵn từ bên trong gruntfile như grunt.option("extra")

Đây là một bloggpost mô tả một cách khác để chạy một công việc grunt: http://andrewduthie.com/2014/01/14/running-grunt-tasks-without-grunt-cli/

+0

Đây là một bài đăng trên blog thú vị. Đây là liên kết được cập nhật cho nó: http://andrewduthie.com/2014/01/14/running-grunt-tasks-without-grunt-cli –

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