Запуск задачи grunt с помощью api, без командной строки
Я хочу создать и запустить задачу grunt в node.js-коде для тестирования.
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 извне без командной строки, но не знаю, как это сделать.
Есть ли способ сделать это?
Ответы
Ответ 1
Вы можете. Я не знаю, зачем кому-то нужно это делать, поскольку в настоящее время 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.');
});
Ответ 2
Вы можете получить вдохновение в том, как запустить grunt из кода, просмотрев grunt-cli, который делает это и который является проектом, поддерживаемым ворчащие люди.
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" будет доступен изнутри файла grunt как grunt.option("extra")
Вот bloggpost, который описывает альтернативный способ запуска задачи grunt: http://andrewduthie.com/2014/01/14/running-grunt-tasks-without-grunt-cli/