Есть несколько проблем с кодом:
- Вы передаете один файл в
confirm
и хотите запросить текст
- Существует несколько проблем с обработкой асинхронных возвратов / обратных вызовов
- То, что вы хотите сделать, не совсем то, что вы вставили в код
Итак, насколько я понимаю, вы хотите выполнить задачу фиксации, которая строит ваш проект, затем добавляет все файлы и затем фиксирует его, основываясь на пользовательском вводе.
Быстрое и грязное решение этой проблемы может заключаться в использовании readline-sync , поскольку вы хотите дождаться завершения коммита в любом случае.
Следующий код должен быть больше в направлении, куда вы хотите идти. Хотя это не проверено, так как я не хотел создавать новый репозиторий для проверки этого ...:)
Я добавил несколько комментариев, чтобы показать намерение и где я что-то изменил, где я увидел проблемы с оригинальным кодом. Надеюсь, это поможет!
// import `readlineSync` to simplify the command line prompt
// I've never used it myself, there might be better ways to do this!
const readlineSync = require('readline-sync');
gulp.task('set-prod-env', function (done) {
process.env.NODE_ENV = 'production';
done();
// Actually, you wouldn't need to have `done` as parameter and call it, as this function is synchronous. As soon as the function is at the end, it's done (if it did not return a promise, stream or wants to call the `done` callback.
});
// Using a single file to create a stream to use some prompt about a stream
// is a very hacky way to do this and I wouldn't try to do that. To make
// this simpler, I've changed it to synchronously wait for an answer here
// before starting / returning the pipeline
function gitCommit() {
// this should block gulp completely until you answered the question
const commitMessage = readlineSync.question('Please write your commit message');
// this returns the actual action of `gitCommit`
return gulp.src('.')
.pipe(git.add({args: '--all'}))
.pipe(git.commit(commitMessage));
}
// this function returned before `git.push` is really done.
// It might not cause issues as "push" is the last action in your pipeline,
// but you might run into issues if you want to do something AFTER `gitPush`.
function gitPush(done) {
git.push('origin', 'dev', function (err) {
if (err) return done(err); // this will send the error to the caller (gulp), if there was one
done(); // this should be called when `git.push` is done - i.e. inside of its callback
});
// you could simplify this to:
// git.push('origin', 'dev', done);
}
gulp.task('deploy', gulp.series('set-prod-env', 'build', gitCommit, gitPush));