@Andy_Francev
Junior Frontend Developer

Как передать параметры в gulp-if?

Добрый день!

Делаю свой gulpfile. Хочется, чтобы, когда я вызывал "gulp prod", файлы минифицировались, а когда просто "gulp", то нет, но записывались sourcemaps. Насколько я понял, этого можно добиться с помощью модуля gulp-if. Пока его работа регулируется вручную путём изменения переменной isDev.
А вот как сделать, чтобы нужный параметр автоматически передавался при вызове gulp из командной строки?

'use strict';


//Requirements
const
	gulp = require('gulp'),
	browsersync = require('browser-sync').create(),
	fs = require('file-system'),
	notify = require('gulp-notify'),
	util = require('gulp-util'),
	gulpIf = require('gulp-if'),
	path = require('path'),
	plumber = require('gulp-plumber'),
	newer = require('gulp-newer'),
	changed = require('gulp-changed'),
	sass = require('gulp-sass'),
	postcss = require('gulp-postcss'),
	sourcemaps = require('gulp-sourcemaps'),
	autoprefixer = require('autoprefixer'),
	mqpacker = require('css-mqpacker'),
	cssnano = require('cssnano');

//Directories here
const
	pathSrc = './src/',
	pathBuild = './build/',

	pathBase = {
		sass: pathSrc + 'scss/',
		css: pathBuild + 'css/',
		data: pathSrc + '_data/'
	},

	pathFull = {
		sass: {
			fullPath: pathBase.sass + '**/*.+(scss)',
			extras: pathBase.sass + 'includes/' + '**/*.+(scss)'
		}
	};

const postCSSpluginsForProd = [
		autoprefixer(),
		mqpacker({
			sort: true
		}),
		cssnano({
			preset: 'default'
		})
	],
	postCSSpluginsForWatch = [
		autoprefixer()
	];


// If true -> watch, if false -> build to production
let isDev = true;

gulp.task('default', ['scss', 'serve']);
gulp.task('prod', ['scss']);


//Tasks

gulp.task('scss', () => {
	return gulp.src(pathFull.sass.fullPath)
		.pipe(gulpIf(isDev, sourcemaps.init()))
		.pipe(plumber())
		.pipe(newer({dest: pathBase.css, ext: '.css', extra: pathFull.sass.extras}))
		.pipe(sass())
		.on("error", notify.onError((error) => error.message))
		.pipe(gulpIf(isDev, postcss(postCSSpluginsForWatch), postcss(postCSSpluginsForProd)))
		.pipe(gulpIf(isDev, sourcemaps.write('/')))
		.pipe(gulp.dest(pathBase.css))
		.pipe(gulpIf(isDev, browsersync.reload({stream: true})))
});


gulp.task('serve', () => {
	browsersync.init({
		server: {
			baseDir: pathBuild
		}
	});
	gulp.watch(pathFull.sass.fullPath, ['scss'])
});
  • Вопрос задан
  • 587 просмотров
Пригласить эксперта
Ответы на вопрос 1
@nomta
Делаю так:
gulp.task('prod', function() {
    isDev = false;
    gulp.start('default');
});	

gulp.task('default', [ /* tasks */ ]);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы