作为交互式提示运行gulp

运行Gulp任务需要花费大量时间,例如:

  • 加载吞咽任务;
  • 导入节点模块。

这可以优化,而不是每次运行gulp task_name我们将运行的东西,将加载gulpfile.js并开始提示,我们可以通过input其名称运行gulpfile.js任务。 这将允许花费时间加载吞吐任务一次,并且导入的节点模块将通过require被caching,并且在随后的任务执行中加载更快。

这怎么能被执行?

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

更新:

我发表了npm包gulp-interactive 。

只需安装它:

 npm install --save-dev gulp-interactive 

并在gulpfile.js使用它:

 require('gulp-interactive')(); 

然后在shell中:

 $ gulp prompt 

原文答案:

我执行了特别的吞咽任务prompt 。 首先安装查询者 :

 npm install --save-dev inquirer 

这是一个有用的包,可以让我们要求开发人员input任务名称。

接下来执行任务:

 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来启动gulp prompt 。 使用这个优化减less了我的Web应用程序在我的Docker for Mac容器中的时间从50到15秒(我相信这是因为文件系统操作缓慢)。 在Mac上直接运行构build时,构build时间从13秒减less到6秒。