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

Другие вопросы по тегам