Я пытаюсь обновить процесс сборки моего проекта до Gulp 4, чтобы у нас не возникало проблем, когда на всех компьютерах установлен Node v12 +.Я столкнулся с проблемой, когда часть процесса сборки связывает код React в 4 версии (по одной для каждого типа пользователя), а затем зависает вместо перехода к следующей задаче в серии.
По сути, эта задача возвращает отображение пакетов browserify, но я думаю, что Gulp 4 ожидает, что каждое возвращение будет своего рода функцией или ее встроенным вызовом done ().
Я пытался вызвать функцию done () перед возвратом массива задач, но, похоже, он выпрыгивает из функции до того, как задачи действительно построены.
Моя следующая попытка потерпела неудачуиз этих четырех пакетов в свои соответствующие задачи, но я хотел посмотреть, есть ли способ спасти шаблон, который уже используется.
gulp.task('js:react', function (done) {
const bundleSettings = [
{
name: 'anon',
context : {
ANON: true,
USER: false,
PREMIUM: false,
ADMIN: false
}
},
{
name: 'user',
context : {
ANON: false,
USER: true,
PREMIUM: false,
ADMIN: false
}
},
{
name: 'premium',
context : {
ANON: false,
USER: true,
PREMIUM: true,
ADMIN: false
}
},
{
name: 'admin',
context : {
ANON: false,
USER: true,
PREMIUM: true,
ADMIN: true
}
}
];
const tasks = bundleSettings.map(function (bundleSetting) {
var bundler = browserify({
entries: [SOURCES_ROOT + '/scripts-src/react/main.jsx'],
cache: {},
packageCache: {},
bundleExternal: false
});
bundler.external(VENDOR_EXTERNALS);
bundler.plugin(watchify);
bundler.transform(babelify, {
global: true,
compact: true,
minified: true,
comments: false,
presets: ['react', 'es2015']
});
bundler.transform(preprocessify, {
context: bundleSetting.context
});
function rebundle () {
var stream = bundler.bundle()
.on('error', handleErrors)
.pipe(source('react-'+ bundleSetting.name +'.js'));
applyUglification(stream)
.pipe(gulp.dest(STATIC_ROOT + '/scripts/compiled'));
if (browserSync) {
stream.pipe(browserSync.stream());
}
return stream;
}
bundler.on('update', rebundle);
bundler.on('time', bundleComplete);
return rebundle();
});
return tasks;
});
gulp.task('build', gulp.series('sass', 'js:vendor', 'js:lib', 'js:react', 'js:charts'));
gulp.task('set_to_prod', function (done) {
process.env.NODE_ENV = 'production';
done();
});
gulp.task('assemble', gulp.series('set_to_prod', 'build', (done) => {
//kill the process here once all of the steps are finished
done();
process.exit(0);
}));
Я ожидаю, что четыре пакета пользовательского типа будут построены перед перемещениемна следующем шаге в моей задаче «gulp-сборки», но вместо этого приложение просто бесконечно зависает на шаге «js: реагировать».