【问题标题】:NodeJs Gulp - confirm before starting taskNodeJs Gulp - 在开始任务之前确认
【发布时间】:2015-07-12 18:44:18
【问题描述】:

我有一个非常繁重的 gulp 任务,我想问用户他是否真的想启动该任务。

我已经看到了 gulp-confirmgulp-prompt,但这对我没有帮助:
我不想管道'确认'我只是不想在用户确认之前开始繁重的任务。

我正在尝试实现这样的目标:

gulp.task('confirm', [], function ()
  {
            //Ask the confirm question here and cancel all task if the user abort
            prompt.confirm({
                message: 'This task will create a new tag version\n. Are you sure you want to continue?',
                default: true
            });
  });

    gulp.task('Build Release QA', ['confirm'], function ()//use this task to make release to QA
    {
        //very heavy task, don't start it if user abort it from 'confirm' task

    });

有什么想法吗?

【问题讨论】:

    标签: node.js gulp prompt confirm


    【解决方案1】:

    不需要 Gulp 插件,实际上这两个包 - inquirer - 可以满足您的任何需求:

    var inquirer = require('inquirer');
    
    gulp.task('default', function(done) {
        inquirer.prompt([{
            type: 'confirm',
            message: 'Do you really want to start?',
            default: true,
            name: 'start'
        }], function(answers) {
            if(answers.start) {
                gulp.start('your-gulp-task');
            }
            done();
        });
    });
    

    传递done 回调并在您进入inquirer 的回调函数后调用它很重要,这样您的任务就不会过早结束。

    这是 Gulp 的优点之一:您可能不需要那些插件 ;-)

    【讨论】:

    • 我要补充一点,为了防止 'your-gulp-task' 直接运行,您可以设置一个随机数并将其传递给 gulp 任务。否则,开发人员可以调用“gulp your-gulp-task”并绕过所有这些确认业务
    • 你能解释一下为什么'done'回调很重要吗?谢谢
    • 此代码不适用于当前版本的查询器模块。 inquirer.prompt() 返回一个承诺,因此您必须使用 inquirer.prompt(questions).then(function(answers) { // your code }) 而不是逗号构造。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多