3

私は空白になっているか、そうあるべきだったよりも複雑です。

grunt-init次のような Grunt タスクから実行しようとしています。

grunt.registerTask('init', 'Scaffold various artifacts', function(param) {
  // analyze `param` and pass execution to `grunt-init`
  // run `grunt-init path/to/some/template/based/on/param/value`
});

の分析の部分paramは、もちろん、問題ではありません。それが実行されてgrunt-initいます。

grunt-init以下の試行と同じフォルダーで直接実行すると、正常に動作します。

次の方法を試しました(コードを短くするためにテンプレートへのパスがインライン化されています)が、すべて役に立ちませんでした:

イサキの殻

shell: {
    init: {
        options: { 
            stdout: true,
            callback: function(err, stdout, stderr, cb) {
                ...
            }
        },
        command: 'grunt-init path/to/some/template/based/on/param/value'
    }
}

その後:

grunt.registerTask('init', 'Scaffold various artifacts', function(param) {
    grunt.task.run(['shell:init']);
});

コマンドラインで:

grunt init

またはコマンドラインから直接:

grunt shell:init

うなり声-exec

exec: {
    init: {
        cmd: 'grunt-init path/to/some/template/based/on/param/value',
        callback: function() {
            ...
        }
    }
}

その後:

grunt.registerTask('init', 'Scaffold various artifacts', function(param) {
    grunt.task.run(['exec:init']);
});

コマンドラインで:

grunt init

またはコマンドラインから直接:

grunt exec:init

ノードのexec

grunt.registerTask('init', 'Scaffold various artifacts', function(param) {
    var exec = require('child_process').exec;
    exec('grunt-init path/to/some/template/based/on/param/value', function(err, stdout, stderr) {
        ...
    });
});

コマンドラインで:

grunt init

何もない。

さまざまな試みがありましたが、grunt-initプロンプトの最初の行を出力するのが最善でした:

Running "init" task

以上です。

私は何が欠けていますか?どうにかして接続する必要がありましたstdoutか?

4

2 に答える 2

0

方法を見つけたと思いますが、ハックっぽい気がします。私はこれに答えるつもりですが、あなたのこともお願いします。

grunt-parallelを使用して実行できます

うなり声パラレル

ここで、タスクは次を使用して定義されます。

parallel: {
    init: {
        options: {
            stream: true
        },
        tasks: [
            {cmd: 'grunt-init'}
        ]
    }            
}

initタスクは次のとおりです。

grunt.registerTask('init', 'Scaffold various artifacts', function(param) {
    // calculate path based on `param`
    ...
    grunt.config.set('parallel.init.tasks.0.args', ['path/to/some/template/based/on/param/value']);
    grunt.task.run(['parallel:init']);
});

次に、コマンドラインで次を実行します。

grunt init:<some param indicating template type or similar>

正常に動作しますgrunt-init

于 2013-09-20T05:33:28.447 に答える