我想在底部运行主build
任务之前提示用户。我正在寻找gulp-prompt作为解决方案,但无法弄清楚如何在任何任务运行之前实现它。我希望用户能够在任何运行之前取消整个build
任务。那可能吗?任何建议都将不胜感激。
不确定如何实施.pipe(prompt.confirm())
gulp.src('test.js')
.pipe(prompt.confirm())
.pipe(gulp.dest('dest'));
这是整个gulp文件
'use strict';
var gulp = require('gulp');
var config = require('../config');
var concat = require('gulp-concat');
var unzip = require('gulp-unzip');
var minimatch = require('minimatch');
var prompt = require('gulp-prompt');
var notify = require('gulp-notify');
var gutil = require('gulp-util');
/**
* Build Initial Project File Structure
* Docs: https://github.com/gulpjs/gulp/blob/master/docs/API.md#async-task-support
* Order of Build:
* 1. 'buildSass': Builds the ./sass directory in root
* 2. 'buildFonts': Extracts the fonts from .zip and places them in ./fonts directory
* 3. 'buildFontsCss': Extracts the fonts .css from .zip, concats all.css and places them in ./sass/typography/_fonts.scss directory
* 4. 'buildJS': Builds the ./js directory in root
* 5. 'moveCustomJSFiles': Places all js files (from wp _underscore theme) in proper directories
* 6. run 'gulp build' in terminal to run all 5 tasks in the proper order and create the initial setup for your project
*/
gulp.task('buildSass', function() {
var stream = gulp.src(config.build.sass.src)
.pipe(gulp.dest(config.build.sass.dest))
return stream
.on('end', function(){ gutil.log(gutil.colors.bgGreen('buildSass Compiled Successfully!')); });
});
gulp.task('buildFonts', ['buildSass'], function() {
var stream = gulp.src(config.build.fonts.src)
.pipe(unzip({
filter: function(entry) {
return minimatch(entry.path, config.build.fonts.include)
}
}))
.pipe(gulp.dest(config.build.fonts.dest))
return stream
.on('end', function(){ gutil.log(gutil.colors.bgGreen('buildFonts Compiled Successfully!')); });
});
gulp.task('buildFontsCss', ['buildFonts'], function() {
var stream = gulp.src(config.build.fonts.css.src)
.pipe(unzip({
filter: function(entry) {
return minimatch(entry.path, config.build.fonts.css.include)
}
}))
.pipe(concat(config.file.name.fontsSass))
.pipe(gulp.dest(config.build.fonts.css.dest))
return stream
.on('end', function(){ gutil.log(gutil.colors.bgGreen('buildFontsCss Compiled Successfully!')); });
});
gulp.task('buildJS', ['buildFontsCss'], function() {
var stream = gulp.src(config.build.js.src)
.pipe(gulp.dest(config.build.js.dest))
return stream
.on('end', function(){ gutil.log(gutil.colors.bgGreen('buildJS Compiled Successfully!')); });
});
gulp.task('moveCustomJSFiles', ['buildJS'], function() {
var stream = gulp.src(config.build.copyJS.src)
.pipe(gulp.dest(config.build.copyJS.dest))
return stream
.on('end', function(){ gutil.log(gutil.colors.bgGreen('moveCustomJSFiles Compiled Successfully!')); })
.pipe(notify({ message: 'Project Build was successful! ✅', onLast: true }));
});
gulp.task('build', ['buildSass', 'buildFonts', 'buildFontsCss', 'buildJS', 'moveCustomJSFiles']);
// TODO:
// put confirm before run
答案 0 :(得分:1)
看看readline-sync。我确定其他人会不同意,但提示是在同步使用IMO时经常效果更好的事情之一。
编辑:
以下是基于gulp v4代码的方式:
const readlineSync = require('readline-sync');
gulp.task('build', gulp.series(
function(done) {
if (readlineSync.keyInYN('Do you want to build?')) {
return done();
}
console.log('Ok, not building.');
process.exit(1);
},
gulp.parallel(
'buildSass',
'buildFonts',
'buildFontsCss',
'buildJS',
'moveCustomJSFiles'
)
));
使用gulp版本< 4,您可以使用run-sequence模块而不是gulp.series:
const readlineSync = require('readline-sync');
const runSequence = require('run-sequence');
gulp.task('build-prompt', function(done) {
if (readlineSync.keyInYN('Do you want to build?')) {
return done();
}
console.log('Ok, not building.');
process.exit(1);
});
gulp.task('build', function(callback) {
runSequence(
'build-prompt',
[
'buildSass',
'buildFonts',
'buildFontsCss',
'buildJS',
'moveCustomJSFiles'
],
callback
);
});
答案 1 :(得分:0)
https://www.npmjs.com/package/gulp-prompt
我自己没有对此进行测试,但文档显示您可以提示用户输入确认消息,例如"继续?"然后可选择继续执行任务:
gulp.src('test.js')
.pipe(prompt.confirm({
message: 'Continue?',
default: true
}))
.pipe(gulp.dest('dest'));