首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Grunt任务中运行咕噜-init?

如何从Grunt任务中运行咕噜-init?
EN

Stack Overflow用户
提问于 2013-09-20 05:05:17
回答 2查看 616关注 0票数 3

我要么把它抹掉,要么它就会变得更复杂。

我试图从Grunt任务运行grunt-init,如下所示:

代码语言:javascript
复制
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 的运行良好的。

我尝试了以下方法(path to template为代码的短促而内联),但都没有效果:

咕噜壳

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

然后:

代码语言:javascript
复制
grunt.registerTask('init', 'Scaffold various artifacts', function(param) {
    grunt.task.run(['shell:init']);
});

在命令行中:

代码语言:javascript
复制
grunt init

或直接从命令行:

代码语言:javascript
复制
grunt shell:init

咕噜声

代码语言:javascript
复制
exec: {
    init: {
        cmd: 'grunt-init path/to/some/template/based/on/param/value',
        callback: function() {
            ...
        }
    }
}

然后:

代码语言:javascript
复制
grunt.registerTask('init', 'Scaffold various artifacts', function(param) {
    grunt.task.run(['exec:init']);
});

在命令行中:

代码语言:javascript
复制
grunt init

或直接从命令行:

代码语言:javascript
复制
grunt exec:init

节点exec

代码语言:javascript
复制
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) {
        ...
    });
});

在命令行中:

代码语言:javascript
复制
grunt init

Nothing.

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

代码语言:javascript
复制
Running "init" task

就是这样。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-20 05:33:28

我想我找到了一条路,但我觉得不太好。我会回答这个问题,但是,,请也给你。

这可以用咕噜-平行来完成

咕噜-平行

其中任务使用以下方法定义:

代码语言:javascript
复制
parallel: {
    init: {
        options: {
            stream: true
        },
        tasks: [
            {cmd: 'grunt-init'}
        ]
    }            
}

init的任务是:

代码语言:javascript
复制
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']);
});

然后,在命令行中运行以下命令:

代码语言:javascript
复制
grunt init:<some param indicating template type or similar>

正确运行grunt-init

票数 0
EN

Stack Overflow用户

发布于 2014-01-15 09:15:01

使用grunt.util.spawn创建子进程。您可以将其设置为异步,并将stdio设置为“inherit”,这样就可以回答任何模板提示。另外,您应该设置一个cwd,否则它会试图覆盖您现有的Gruntfile.js!

代码语言:javascript
复制
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();
    });
});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18909159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档