Я пытаюсь условно передать поток файлов на основе значения переменной, как способ определить две отдельные среды сборки (например, разработку и производство).
Некоторые задачи могут выполняться индивидуально с помощью флага командной строки:
gulp scripts --env production
И затем выполните некоторые шаги по созданию только для производства:
gulp.task('scripts', function() {
var jsFilter = filter(['*.js']),
appFiles;
return gulp.src(appFiles)
.pipe(jsFilter)
.pipe(concat('application-build.js'))
.pipe(gulpif(env === 'production', uglify()))
.pipe(size())
.pipe(gulpif(env === 'production', gulp.dest('dist/js'), gulp.dest('tmp/js')))
.pipe(browserSync.reload({ stream: true }));
});
У меня есть задача build
, которая вызывает ряд других задач в качестве зависимостей (включая, например, эту задачу scripts
). Я хочу, чтобы эта задача build
назначала переменную (env
, в этом случае) перед запуском зависимостей задач. Это означает, что это:
gulp.task('build', ['scripts', 'styles', 'otherstuff'], function() {
env = 'production';
}
не работает, потому что зависимости запускаются перед телом задачи.
В настоящее время я реализовал его с помощью gulp.start
:
gulp.task('build', function() {
env = 'production';
gulp.start('scripts');
});
Но метод .start
фактически не является частью общедоступного API gulp - он поступает из Orchestrator - и не предназначен для использования ни для чего. Кроме того, эквивалентный метод gulp.run
был устаревшим из API некоторое время назад.
Итак, мне интересно - есть ли другой способ, которым я мог бы назначить переменную в задаче, прежде чем запускать ее зависимости?
(Или, может быть, есть лучший способ реализовать что-то вроде среды сборки в gulp?)