我想在node.js代码中创建并运行grunt任务以供测试使用。
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*/]);
}
但这不起作用。 Grunt似乎没有执行任何任务。我几乎可以肯定,有一些API可以在没有命令行的情况下在外部运行grunt任务,但不知道如何操作。
有什么办法吗?
答案 0 :(得分:20)
你可以。我不知道为什么有人会这样做,因为目前Grunt是一个命令行工具。 警告:我不建议以这种方式运行Grunt。但这里是:
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 :(得分:13)
你可以通过查看执行此操作的grunt-cli以及由grunt人员维护的项目来获取有关如何通过代码运行grunt的灵感。
Grunt是从grunt-cli/bin/grunt中的代码启动的,您可以在grunt/lib/grunt/cli.js中详细了解这些选项。
我在像这样的私人项目中使用它:
var grunt = require("grunt");
grunt.cli({
gruntfile: __dirname + "/path/to/someGruntfile.js",
extra: {key: "value"}
});
关键字“extra”将在gruntfile中作为grunt.option("extra")
这是一个bloggpost,描述了运行grunt任务的另一种方法:http://andrewduthie.com/2014/01/14/running-grunt-tasks-without-grunt-cli/