Gruntjs 如何从grunt任务运行grunt init?

Gruntjs 如何从grunt任务运行grunt init?,gruntjs,grunt-init,Gruntjs,Grunt Init,我要么是空白,要么是更复杂 我正在尝试从grunt任务运行grunt init,如下所示: 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` }); 当然,

我要么是空白,要么是更复杂

我正在尝试从grunt任务运行
grunt init
,如下所示:

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

我尝试了以下方法(模板路径是内联的,因为代码很短),但都没有用:

咕噜声 然后:

grunt.registerTask('init', 'Scaffold various artifacts', function(param) {
    grunt.task.run(['shell:init']);
});
grunt.registerTask('init', 'Scaffold various artifacts', function(param) {
    grunt.task.run(['exec:init']);
});
和在命令行中:

grunt init
grunt init
grunt init
grunt init:<some param indicating template type or similar>
或直接从命令行:

grunt shell:init
grunt exec:init
格伦特执行官 然后:

grunt.registerTask('init', 'Scaffold various artifacts', function(param) {
    grunt.task.run(['shell:init']);
});
grunt.registerTask('init', 'Scaffold various artifacts', function(param) {
    grunt.task.run(['exec:init']);
});
和在命令行中:

grunt init
grunt init
grunt init
grunt init:<some param indicating template type or similar>
或直接从命令行:

grunt shell:init
grunt exec:init
节点的
exec
和在命令行中:

grunt init
grunt init
grunt init
grunt init:<some param indicating template type or similar>
什么都没有。

有多种尝试,其中最好的是打印
grunt init
提示符的第一行:

Running "init" task
就这样


我错过了什么?我是否应该以某种方式连接
stdout

我想我找到了一种方法,但我觉得它有点黑客味。我打算回答这个问题,但是,请也把你的回答给我

可以使用

呼噜声平行线 其中,任务是通过以下方式定义的:

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
grunt init
grunt init
grunt init:<some param indicating template type or similar>
grunt初始化:

正确运行
grunt init

使用创建子进程。您可以将其设置为异步,并将stdio设置为“inherit”,以便响应任何模板提示。另外,您应该设置cwd,否则它将试图覆盖您现有的Gruntfile.js

grunt.registerTask('init', 'Scaffold various artifacts', function(grunt_init_template) {

    var done = this.async();

    grunt.util.spawn({
        cmd: 'grunt-init',
        args: [grunt_init_template],
        opts: {
            stdio: 'inherit',
            cwd: 'new_project_dir',
        }
    }, function (err, result, code) {
        done();
    });
});

我更喜欢这个,因为它不需要任何额外的模块,并且工作良好。