运行 gulp 作为交互式提示
Run gulp as interactive prompt
运行ning Gulp 任务花费的大量时间落在这样的事情上:
- 正在加载gulp个任务;
- 正在导入节点模块。
这可以优化,如果不是 运行每次 gulp task_name
我们将 运行 将加载 gulpfile.js
的东西并在我们可以 [=36] 的地方启动提示=] gulp 任务通过输入它的名字。这将允许只花时间加载 gulp 任务一次,并且导入的节点模块将由 require
缓存并在后续任务执行时加载得更快。
如何实施?
这是我与社区分享我的知识的自我回答问题。
欢迎提供其他答案。将采纳最佳答案。
更新:
我发布了 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
来启动提示符。
使用此优化将我的 Web 应用程序在 Docker for Mac 容器中的构建时间从 50 秒减少到 15 秒(我相信这是因为文件系统操作缓慢)。当 运行 直接在我的 Mac 上构建时,构建时间从 13 秒减少到 6 秒。
运行ning Gulp 任务花费的大量时间落在这样的事情上:
- 正在加载gulp个任务;
- 正在导入节点模块。
这可以优化,如果不是 运行每次 gulp task_name
我们将 运行 将加载 gulpfile.js
的东西并在我们可以 [=36] 的地方启动提示=] gulp 任务通过输入它的名字。这将允许只花时间加载 gulp 任务一次,并且导入的节点模块将由 require
缓存并在后续任务执行时加载得更快。
如何实施?
这是我与社区分享我的知识的自我回答问题。
欢迎提供其他答案。将采纳最佳答案。
更新:
我发布了 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
来启动提示符。
使用此优化将我的 Web 应用程序在 Docker for Mac 容器中的构建时间从 50 秒减少到 15 秒(我相信这是因为文件系统操作缓慢)。当 运行 直接在我的 Mac 上构建时,构建时间从 13 秒减少到 6 秒。