作为交互式提示运行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秒。