Добрый день!
Делаю свой 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'])
});