【问题标题】:Run gulp as interactive prompt运行 gulp 作为交互式提示
【发布时间】:2017-10-09 18:46:02
【问题描述】:

运行 Gulp 任务所花费的大量时间落在以下方面:

  • 加载 gulp 任务;
  • 正在导入节点模块。

如果不是每次都运行gulp task_name,我们将运行将加载gulpfile.js 并启动提示符,我们可以通过输入其名称来运行 gulp 任务。这将允许只花一次时间加载 gulp 任务,导入的节点模块将被 require 缓存,并在后续任务执行时加载速度更快。

如何实现?

这是一个自我回答的问题,我在这里与社区分享我的知识。
欢迎其他答案。最佳答案将被接受。

【问题讨论】:

    标签: javascript node.js gulp prompt interactive


    【解决方案1】:

    更新:

    我发布了 npm 包gulp-interactive

    只需安装它:

    npm install --save-dev gulp-interactive
    

    并在gulpfile.js中使用它:

    require('gulp-interactive')();
    

    然后在shell中:

    $ gulp prompt
    

    原始答案:

    我实现了特殊的 gulp 任务prompt。 先安装inquirer

    npm install --save-dev inquirer
    

    这是一个有用的包,可以让我们要求开发者输入任务名称。

    接下来执行任务:

    gulp.task('prompt', function (cb) {
        var promptedTask;
    
        function startPrompt() {
            promptedTask = undefined;
            gulp.start('prompt');
        }
    
        function onTaskEnd(event) {
            setTimeout(function () {
                if (event && promptedTask && event.task === promptedTask) {
                    gulp.removeListener('task_stop', onTaskEnd);
                    gulp.removeListener('task_err', onTaskEnd);
                    gulp.removeListener('task_not_found', onTaskEnd);
                    startPrompt();
                }
            });
        }
    
        gulp.on('task_stop', onTaskEnd);
        gulp.on('task_err', onTaskEnd);
        // replace gulp default listener for 'task_not_found' because it calls process.exit(1)
        gulp.removeAllListeners('task_not_found');
        gulp.on('task_not_found', function (err) {
            console.log('Task \'' + err.task + '\' is not in your gulpfile');
            onTaskEnd(err);
        });
    
        var inquirer = require('inquirer');
        inquirer.prompt([{ type: 'input', name: 'task', 'message': 'Enter gulp task name:' }])
            .then(function (answers) {
                promptedTask = answers.task || 'prompt';
                cb();
                gulp.start(promptedTask);
            });
    });
    

    现在您可以通过执行gulp prompt 来启动提示。 使用此优化将我的 Docker for Mac 容器内的 Web 应用程序的构建时间从 50 秒减少到 15 秒(我相信这是因为文件系统操作缓慢)。当直接在我的 Mac 上运行构建时,构建时间从 13 秒减少到 6 秒。

    【讨论】:

      猜你喜欢
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 2019-08-14
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 2013-04-16
      相关资源
      最近更新 更多