16

テスト用に 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 はタスクを実行していないようです。コマンドラインなしでgruntタスクを外部で実行するAPIがあるとほぼ確信していますが、その方法はわかりません。

それを行う方法はありますか?

4

2 に答える 2

21

あなたはできる。現在 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.');
});
于 2013-05-15T16:51:40.280 に答える
14

これを行う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")

これは、grunt タスクを実行する別の方法を説明するブログ投稿です

于 2014-07-25T08:25:56.473 に答える