Есть ли правильный способ вернуть массивы в задании Gulp 4? - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь обновить процесс сборки моего проекта до 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: реагировать».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...