Запуск задачи 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/