Запуск задачи 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*/]);
}
Но это не работает. Кажется, что Грант не выполняет никаких задач. Я почти уверен, что есть некоторый API для запуска задачи grunt извне без командной строки, но я не знаю, как это сделать.
Есть ли способ сделать это?
2 ответа
Вы можете. Я не знаю, зачем кому-то это нужно делать, так как в настоящее время 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.');
});
Вы можете получить вдохновение о том, как запустить grunt из кода, взглянув на grunt-cli, который это делает, и который является проектом, поддерживаемым 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")
Вот блог, в котором описан альтернативный способ запуска задачи: http://andrewduthie.com/2014/01/14/running-grunt-tasks-without-grunt-cli/