我想访问grunt生态系统中的许多可用插件和任务,以使我的生活更轻松,但我想控制每个任务的运行时间和方式。最重要的是,我想要一种以编程方式运行grunt任务的方法,而不是在grunt
的文件夹中从命令行运行Gruntfile
。所以我开始在grunt-cli
和grunt
寻找“进入的方式”。
来自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) {
...
正如你所看到的,奥尔曼先生提醒我们关于界面......我的问题是,是否有人让这个工作?
到目前为止,我的实验让我相信以编程方式控制grunt的最佳方法是使用子进程模仿命令行调用:
$ 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 */ });
这看起来很脏,所以我正在考虑简单地编写我自己的任务运行器,它公开了一个grunt任务的接口。但是,如果有人grunt.tasks()
取得了成功,尽管有奥尔曼先生的警告,我不想重复工作。
答案 0 :(得分:2)
显而易见的答案似乎应该写一个咕噜咕噜的任务来做你想做的事情:)
然后,您可以使用grunt.task.run()
来控制其他grunt任务:http://www.gruntjs.org/article/grunt_task.html
您还可以通过弄乱grunt.config
还有这个答案可以回答你的问题: How can I run a grunt task from within a grunt task?
同时查看grunt.task.start()
哪些文件没有公开记录,但它似乎启动了所有任务https://github.com/gruntjs/grunt/blob/master/lib/util/task.js#L246(帽子提示:@jibsales)
答案 1 :(得分:-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);