2013-11-27 73 views
0

我希望能夠訪問grunt生態系統中的許多可用插件和任務,以使我的生活更輕鬆,但我希望控制每個任務的運行時間和方式。最重要的是,我想要一種以編程方式運行grunt任務的方式,而不是在Gruntfile的文件夾中從命令行運行grunt。所以我開始在grunt-cligrunt之間徘徊一段「進路」。以編程方式控制Grunt.js

GruntJS源代碼:

// Expose the task interface. I've never called this manually, and have no idea 
// how it will work. But it might. 
grunt.tasks = function(tasks, options, done) { 
    ... 

正如你可以看到,奧曼先生提醒我們介紹一下界面...我的問題是,有沒有人得到這個工作?

我的實驗,到目前爲止,還使我相信以編程方式控制咕嚕最好的辦法就是用一個子進程模仿命令行調用:

$ npm install grunt-cli //notice no -g flag 

// From runner.js 
var exec =require('child_process').exec 

exec('node_modules/.bin/grunt-cli tasks to run', { 
    cwd: 'path/to/directory/with/a/gruntfile' 
}, function() { /* do stuff here */ }); 

這似乎髒,所以我想只需編寫我自己的任務管理器,爲暴露任務提供一個界面。不過,儘管Allman先生的警告,但如果有人在grunt.tasks()成功,我不想重複工作。

+0

如果您舉例說明您正在嘗試做什麼,這可能會更容易回答。 – Mathletics

+0

謝謝......我會添加一些僞代碼 – srquinn

回答

2

顯而易見的答案似乎應該是寫一個咕嚕任務做任何你想做的事情:)

然後你可以使用grunt.task.run()控制其他咕嚕任務:http://www.gruntjs.org/article/grunt_task.html

您還可以更新自己的CONFIGS動態與grunt.config

搞亂很容易在運行之前還有這個答案可以回答你的問題: How can I run a grunt task from within a grunt task?

還檢查了grunt.task.start()未publicy記錄,但它似乎揭開序幕所有的任務https://github.com/gruntjs/grunt/blob/master/lib/util/task.js#L246(帽尖:@jibsales)

+1

雖然這對於從grunt任務中運行grunt任務來說很好,但我試圖避免從命令行運行'grunt'來啓動一切。我正在更新我的問題,所以這更清楚。 – srquinn

+0

你試圖避免什麼?它是全球安裝grunt嗎?咕嚕只是一個節點程序.... –

+0

嗯...第二個想到你的答案中的鏈接可能有正確的突觸現在射擊。掛緊,測試是必要的。 – srquinn

-1

也許這會幫助你編寫自定義處理程序:https://www.npmjs.com/package/rungrunttask

使用詳情

var RunGruntTask = require('rungrunttask').RunGruntTask; 
var taskname = 'some grunt task such as backup database every 24hours'; 
RunGruntTask(taskname); 
相關問題