Major step for build process
- updated to 0.4.0 - corrected license for npm - update to gulp 4 - updated all dependencies - new and removed packages, see `package.json` - changed file structure, renamed `pages` to `screen` and new `data` folder - complete change of `gulpfile.js` with similar output
This commit is contained in:
parent
90894f3253
commit
45f59f578b
26 changed files with 2702 additions and 2436 deletions
569
gulpfile.js
569
gulpfile.js
|
|
@ -1,243 +1,404 @@
|
|||
// Setup project
|
||||
var source_folder = {
|
||||
watch: ['source/style/hippie/**/*.scss', 'source/style/**/*.scss', 'source/templates/**/*.+(html|njk)', 'source/pages/**/*.+(html|njk)'],
|
||||
styles: ['source/style/hippie/*.+(scss|sass)', 'source/style/**/*.+(scss|sass)'],
|
||||
scripts: ['source/code/hippie/variables.js', 'source/code/hippie/functions.js', 'source/code/hippie/global.js', 'source/code/**/*.coffee', '!source/vendor/**/*', ],
|
||||
images: 'source/art/images/**/*',
|
||||
pages: 'source/pages/**/*.+(html|njk)',
|
||||
vendor: 'vendor/**/*',
|
||||
root: 'source'
|
||||
};
|
||||
var build_folder = {
|
||||
styles: 'build/css',
|
||||
scripts: 'build/js',
|
||||
art: 'build/art',
|
||||
vendor: 'build/vendor',
|
||||
pages: 'build/**/*.html',
|
||||
root: 'build'
|
||||
const hippie = {
|
||||
brand: 'hippie',
|
||||
jsFile: 'main',
|
||||
dbFile: 'db'
|
||||
}
|
||||
|
||||
// Load plugins
|
||||
const fs = require('fs');
|
||||
const gulp = require('gulp');
|
||||
// const rename = require('gulp-rename');
|
||||
const del = require('del');
|
||||
const gulpif = require('gulp-if');
|
||||
const sequencer = require('run-sequence');
|
||||
const sourcemap = require('gulp-sourcemaps');
|
||||
const prefix = require('gulp-autoprefixer');
|
||||
const sass = require('gulp-sass');
|
||||
// const rubysass = require('gulp-ruby-sass');
|
||||
const nunjucks = require('gulp-nunjucks-render');
|
||||
// const cssnano = require('gulp-cssnano');
|
||||
const jshint = require('gulp-jshint');
|
||||
const jscs = require('gulp-jscs');
|
||||
// const useref = require('gulp-useref');
|
||||
const sasslint = require('gulp-sass-lint');
|
||||
// const imagemin = require('gulp-imagemin');
|
||||
const spritesmith = require('gulp.spritesmith');
|
||||
// const changed = require('gulp-changed');
|
||||
// const newer = require('gulp-newer');
|
||||
const plumber = require('gulp-plumber');
|
||||
const notify = require('gulp-notify');
|
||||
const data = require('gulp-data');
|
||||
const browsersync = require('browser-sync').create();
|
||||
// Gulp requirements
|
||||
const { watch, series, parallel } = require('gulp');
|
||||
const { src, dest } = require('gulp');
|
||||
|
||||
// only used for js task
|
||||
const concat = require('gulp-concat');
|
||||
const fs = require('fs');
|
||||
const del = require('del');
|
||||
const plumber = require('gulp-plumber');
|
||||
// const notify = require('gulp-notify');
|
||||
|
||||
const nunjucksRender = require('gulp-nunjucks-render');
|
||||
const data = require('gulp-data');
|
||||
const jsonConcat = require('gulp-json-concat');
|
||||
const browserSync = require('browser-sync'), server = browserSync.create();
|
||||
const sass = require('gulp-sass');
|
||||
const autoprefixer = require('gulp-autoprefixer');
|
||||
const sassLint = require('gulp-sass-lint');
|
||||
const rename = require('gulp-rename');
|
||||
const cleanCss = require('gulp-clean-css');
|
||||
const pump = require('pump');
|
||||
const composer = require('gulp-uglify/composer');
|
||||
const uglifyjs = require('uglify-es');
|
||||
const minify = composer(uglifyjs, console);
|
||||
const cache = require('gulp-cached');
|
||||
const remember = require('gulp-remember');
|
||||
const concat = require('gulp-concat');
|
||||
const uglify = require('gulp-uglify');
|
||||
const jshint = require('gulp-jshint');
|
||||
const gulpif = require('gulp-if');
|
||||
const changed = require('gulp-changed');
|
||||
const merge = require('merge-stream');
|
||||
// const spritesmith = require('gulp.spritesmith');
|
||||
// const buffer = require('vinyl-buffer');
|
||||
// const imagemin = require('gulp-imagemin');
|
||||
|
||||
// Paths to data
|
||||
const input = {
|
||||
root: 'source',
|
||||
screens: 'source/screens/**/*.+(njk|html)',
|
||||
templates: 'source/templates',
|
||||
data: {
|
||||
hippie: 'source/data/demo.json',
|
||||
app: ['source/data/**/*.json', '!source/data/demo_data.json'],
|
||||
watch: 'source/data/**/*.json',
|
||||
},
|
||||
style: 'source/style/**/*.s+(a|c)ss',
|
||||
code: ['source/code/hippie/variables.js', 'source/code/hippie/functions.js', 'source/code/hippie/global.js', '!source/vendor/**/*'],
|
||||
fonts: 'node_modules/@fortawesome/fontawesome-free/webfonts/**/*',
|
||||
art: {
|
||||
favicons: 'source/art/favicons/**/*.+(ico|png)',
|
||||
sprites: 'source/art/sprites/**/*.png',
|
||||
images: 'source/art/images/**/*.+(png|gif|jpg)'
|
||||
},
|
||||
vendor: 'vendor/**/*'
|
||||
// watch: ['source/style/hippie/**/*.scss', 'source/style/**/*.scss', 'source/templates/**/*.+(html|njk)', 'source/screens/**/*.+(html|njk)']
|
||||
};
|
||||
|
||||
const output = {
|
||||
root: 'build',
|
||||
screens: 'build/**/*.html',
|
||||
data: 'build/json',
|
||||
style: 'build/css',
|
||||
code: 'build/js',
|
||||
fonts: 'build/fonts',
|
||||
art: 'build/art',
|
||||
reports: 'reports',
|
||||
vendor: 'build/vendor'
|
||||
};
|
||||
|
||||
// Create tasks
|
||||
|
||||
// this is for the looks
|
||||
gulp.task('sass', function() {
|
||||
return gulp.src(source_folder.styles)
|
||||
.pipe(plumbError('Error Running Sass'))
|
||||
.pipe(sourcemap.init())
|
||||
// Clean build folder
|
||||
function clean() {
|
||||
// You can use multiple globbing patterns as you would with `gulp.src`,
|
||||
// for example if you are using del 2.0 or above, return its promise
|
||||
return del(output.root +'/**');
|
||||
}
|
||||
// cleans the build folder
|
||||
// gulp.task('clean:dev', function() {
|
||||
// return del.sync([
|
||||
// output.style,
|
||||
// output.screens,
|
||||
// output.root+'/*.html'
|
||||
// ]);
|
||||
// });
|
||||
|
||||
// Automagically reload browsers
|
||||
function reload(done) {
|
||||
server.reload();
|
||||
|
||||
done();
|
||||
}
|
||||
|
||||
// Concatenate JSON files
|
||||
function json() {
|
||||
return src(input.data.app)
|
||||
.pipe(jsonConcat(jsonFile +'.json', function(data) {
|
||||
return new Buffer(JSON.stringify(data));
|
||||
}))
|
||||
.pipe(gulp.dest(output.data));
|
||||
}
|
||||
|
||||
// Transpile HTML
|
||||
function nunjucks() {
|
||||
return src(input.screens)
|
||||
.pipe(plumber())
|
||||
.pipe(data(function() {
|
||||
let data = JSON.parse(fs.readFileSync(input.data.hippie));
|
||||
object = {hippie, data};
|
||||
return object;
|
||||
}))
|
||||
.pipe(nunjucksRender({
|
||||
path: input.templates,
|
||||
envOptions: {
|
||||
trimBlocks: true
|
||||
}
|
||||
}))
|
||||
.pipe(dest(output.root));
|
||||
}
|
||||
// templating engine
|
||||
// gulp.task('nunjucks', function() {
|
||||
// return gulp.src('source/screens/**/*.+(html|njk)')
|
||||
// .pipe(plumbError('Error Running Nunjucks'))
|
||||
// .pipe(data(function() {
|
||||
// return JSON.parse(fs.readFileSync('./source/demo_data.json'))
|
||||
// }))
|
||||
// .pipe(nunjucks({
|
||||
// path: output.templates,
|
||||
// envOptions: {
|
||||
// trimBlocks: true
|
||||
// }
|
||||
// }))
|
||||
// .pipe(gulp.dest(output.root))
|
||||
// .pipe(server.reload({
|
||||
// stream: true
|
||||
// }))
|
||||
// });
|
||||
|
||||
// Serve files to the browser
|
||||
function serve(done) {
|
||||
server.init({
|
||||
index: "demo.html",
|
||||
open: false,
|
||||
server: output.root
|
||||
});
|
||||
|
||||
done();
|
||||
}
|
||||
// automagically reload browsers
|
||||
// gulp.task('syncreload', function() {
|
||||
// server.init({
|
||||
// // ------------------------------------------------------------------------------
|
||||
// // comment out the line below to get rid of the demo index page.
|
||||
// // ------------------------------------------------------------------------------
|
||||
// index: "demo.html",
|
||||
// open: false,
|
||||
// server: 'build'
|
||||
// // online: false,
|
||||
// // logLevel: "info",
|
||||
// // proxy: "http://verser.vrt/virtual/",
|
||||
// // watch: true,
|
||||
// });
|
||||
// });
|
||||
|
||||
// This is for the looks
|
||||
function style() {
|
||||
return src(input.style)
|
||||
.pipe(plumber())
|
||||
// .pipe(plumbError('STYLE problems'))
|
||||
.pipe(sass({
|
||||
includePaths: [source_folder.root+'/bower_components']
|
||||
includePaths: [input.vendor +'/**/*.s+(a|c)ss']
|
||||
}))
|
||||
.pipe(prefix(['>= 4%', 'last 2 version']))
|
||||
// .pipe(cssnano())
|
||||
.pipe(sourcemap.write())
|
||||
.pipe(gulp.dest(build_folder.styles))
|
||||
.pipe(browsersync.reload({
|
||||
stream: true
|
||||
.pipe(autoprefixer(['>= 4%', 'last 2 version']))
|
||||
.pipe(dest(output.style))
|
||||
.pipe(cleanCss())
|
||||
.pipe(rename({
|
||||
suffix: '.min'
|
||||
}))
|
||||
});
|
||||
// linting ...
|
||||
gulp.task('lint:scss', function() {
|
||||
return gulp.src('source/style/**/*.scss')
|
||||
.pipe(plumbError('SASSLint Error'))
|
||||
.pipe(sasslint({
|
||||
configFile: '.sass-lint.yml'
|
||||
.pipe(dest(output.style));
|
||||
}
|
||||
// Linting
|
||||
function styleLint() {
|
||||
var file = fs.createWriteStream(output.reports +'/sass-lint.html');
|
||||
var stream = src(input.style)
|
||||
.pipe(plumber())
|
||||
.pipe(sassLint({
|
||||
configFile: '.sasslintrc',
|
||||
files: {
|
||||
ignore: input.vendor +'/**/*.s+(a|c)ss'
|
||||
}
|
||||
}))
|
||||
})
|
||||
.pipe(sassLint.format(file));
|
||||
|
||||
stream.on('finish', function() {
|
||||
file.end();
|
||||
});
|
||||
|
||||
// and this is functionality
|
||||
gulp.task('js', function(cb) {
|
||||
return stream;
|
||||
}
|
||||
// this is for the looks
|
||||
// gulp.task('sass', function() {
|
||||
// return gulp.src(input.style)
|
||||
// .pipe(plumbError('Error Running Sass'))
|
||||
// .pipe(sourcemap.init())
|
||||
// .pipe(sass({
|
||||
// includePaths: [input.root+'/bower_components']
|
||||
// }))
|
||||
// .pipe(autoprefixer(['>= 4%', 'last 2 version']))
|
||||
// // .pipe(cssnano())
|
||||
// .pipe(sourcemap.write())
|
||||
// .pipe(gulp.dest(output.style))
|
||||
// .pipe(server.reload({
|
||||
// stream: true
|
||||
// }))
|
||||
// });
|
||||
// // linting ...
|
||||
// gulp.task('lint:scss', function() {
|
||||
// return gulp.src('source/style/**/*.scss')
|
||||
// .pipe(plumbError('SASSLint Error'))
|
||||
// .pipe(sasslint({
|
||||
// configFile: '.sass-lint.yml'
|
||||
// }))
|
||||
// })
|
||||
|
||||
// Javascript for the win
|
||||
function code(cb) {
|
||||
pump([
|
||||
gulp.src(source_folder.scripts),
|
||||
cache('scripts'),
|
||||
// jshint('.jshintrc'),
|
||||
// jshint.reporter('default'),
|
||||
sourcemap.init(),
|
||||
minify(),
|
||||
remember('scripts'),
|
||||
concat('all.min.js'),
|
||||
sourcemap.write(),
|
||||
gulp.dest(build_folder.scripts),
|
||||
browsersync.stream()
|
||||
src(input.code, { sourcemaps: true }),
|
||||
cache('code'),
|
||||
concat(hippie.jsFile +'.js'),
|
||||
dest(output.code),
|
||||
uglify(),
|
||||
remember('code'),
|
||||
rename({
|
||||
suffix: '.min'
|
||||
}),
|
||||
dest(output.code, { sourcemaps: '.' }),
|
||||
], cb);
|
||||
});
|
||||
// linting ...
|
||||
gulp.task('lint:js', function() {
|
||||
return gulp.src('source/code/**/*.js')
|
||||
.pipe(plumbError('JSHint Error'))
|
||||
}
|
||||
// Linting
|
||||
function codeLint() {
|
||||
return src(input.code)
|
||||
.pipe(plumber())
|
||||
.pipe(jshint())
|
||||
.pipe(jshint.reporter('jshint-stylish'))
|
||||
.pipe(jshint.reporter('fail', {
|
||||
ignoreWarning: true,
|
||||
ignoreInfo: true
|
||||
}))
|
||||
.pipe(jscs({
|
||||
fix: false,
|
||||
configPath: '.jscsrc'
|
||||
}))
|
||||
// .pipe(jscs.reporter());
|
||||
});
|
||||
}));
|
||||
}
|
||||
// and this is functionality
|
||||
// gulp.task('js', function(cb) {
|
||||
// pump([
|
||||
// gulp.src(input.code),
|
||||
// cache('code'),
|
||||
// // jshint('.jshintrc'),
|
||||
// // jshint.reporter('default'),
|
||||
// sourcemap.init(),
|
||||
// minify(),
|
||||
// remember('code'),
|
||||
// concat('all.min.js'),
|
||||
// sourcemap.write(),
|
||||
// gulp.dest(output.code),
|
||||
// server.stream()
|
||||
// ], cb);
|
||||
// });
|
||||
// // linting ...
|
||||
// gulp.task('lint:js', function() {
|
||||
// return gulp.src('source/code/**/*.js')
|
||||
// .pipe(plumbError('JSHint Error'))
|
||||
// .pipe(jshint())
|
||||
// .pipe(jshint.reporter('jshint-stylish'))
|
||||
// .pipe(jshint.reporter('fail', {
|
||||
// ignoreWarning: true,
|
||||
// ignoreInfo: true
|
||||
// }))
|
||||
// .pipe(jscs({
|
||||
// fix: false,
|
||||
// configPath: '.jscsrc'
|
||||
// }))
|
||||
// // .pipe(jscs.reporter());
|
||||
// });
|
||||
|
||||
// Fonts
|
||||
function fonts() {
|
||||
return src(input.fonts)
|
||||
.pipe(plumber())
|
||||
.pipe(dest(output.fonts))
|
||||
}
|
||||
|
||||
// templating engine
|
||||
gulp.task('nunjucks', function() {
|
||||
return gulp.src('source/pages/**/*.+(html|njk)')
|
||||
.pipe(plumbError('Error Running Nunjucks'))
|
||||
.pipe(data(function() {
|
||||
return JSON.parse(fs.readFileSync('./source/demo_data.json'))
|
||||
}))
|
||||
.pipe(nunjucks({
|
||||
path: ['source/templates'],
|
||||
envOptions: {
|
||||
trimBlocks: true
|
||||
}
|
||||
}))
|
||||
.pipe(gulp.dest(build_folder.root))
|
||||
.pipe(browsersync.reload({
|
||||
stream: true
|
||||
}))
|
||||
});
|
||||
// Add art
|
||||
function art() {
|
||||
// Move favicons to the root folder
|
||||
let favicons = src(input.art.favicons)
|
||||
.pipe(changed(output.art))
|
||||
.pipe(dest(output.root))
|
||||
|
||||
// Assemble sprites
|
||||
|
||||
// automagically reload browsers
|
||||
gulp.task('syncreload', function() {
|
||||
browsersync.init({
|
||||
// ------------------------------------------------------------------------------
|
||||
// comment out the line below to get rid of the demo index page.
|
||||
// ------------------------------------------------------------------------------
|
||||
index: "demo.html",
|
||||
open: false,
|
||||
server: 'build'
|
||||
// online: false,
|
||||
// logLevel: "info",
|
||||
// proxy: "http://verser.vrt/virtual/",
|
||||
// watch: true,
|
||||
});
|
||||
});
|
||||
|
||||
// Move images to the root folder
|
||||
let images = src(input.art.images)
|
||||
.pipe(changed(output.art))
|
||||
.pipe(dest(output.art))
|
||||
|
||||
return merge(favicons, images)
|
||||
}
|
||||
// creates sprites from files in art/sprites folder
|
||||
gulp.task('sprites', function() {
|
||||
gulp.src('source/art/sprites/**/*')
|
||||
.pipe(spritesmith({
|
||||
cssName: '_sprites.scss',
|
||||
imgName: 'sprites.png',
|
||||
imgPath: '../art/sprites.png',
|
||||
// retinaSrcFilter: 'source/art/sprites/*@2x.png',
|
||||
// retinaImgName: 'sprites@2x.png',
|
||||
// retinaImgPath: '../art/sprites@2x.png'
|
||||
}))
|
||||
.pipe(gulpif('*.png', gulp.dest(build_folder.art)))
|
||||
.pipe(gulpif('*.scss', gulp.dest('source/style/hippie/mixins')));
|
||||
});
|
||||
|
||||
// gulp.task('sprites', function() {
|
||||
// gulp.src('source/art/sprites/**/*')
|
||||
// .pipe(spritesmith({
|
||||
// cssName: '_sprites.scss',
|
||||
// imgName: 'sprites.png',
|
||||
// imgPath: '../art/sprites.png',
|
||||
// // retinaSrcFilter: 'source/art/sprites/*@2x.png',
|
||||
// // retinaImgName: 'sprites@2x.png',
|
||||
// // retinaImgPath: '../art/sprites@2x.png'
|
||||
// }))
|
||||
// .pipe(gulpif('*.png', gulp.dest(output.art)))
|
||||
// .pipe(gulpif('*.scss', gulp.dest('source/style/hippie/mixins')));
|
||||
// });
|
||||
// copy art files
|
||||
gulp.task('art', function() {
|
||||
return gulp.src(source_folder.images)
|
||||
.pipe(plumbError())
|
||||
.pipe(gulp.dest(build_folder.art))
|
||||
;
|
||||
});
|
||||
|
||||
// copy vendor files
|
||||
gulp.task('vendor', function() {
|
||||
return gulp.src(source_folder.vendor)
|
||||
.pipe(plumbError())
|
||||
.pipe(gulp.dest(build_folder.vendor))
|
||||
;
|
||||
});
|
||||
|
||||
// gulp.task('art', function() {
|
||||
// return gulp.src(input.art)
|
||||
// .pipe(plumbError())
|
||||
// .pipe(gulp.dest(output.art))
|
||||
// ;
|
||||
// });
|
||||
// copy additional files
|
||||
gulp.task('favicon', function() {
|
||||
return gulp.src('source/favicon.ico')
|
||||
.pipe(plumbError())
|
||||
.pipe(gulp.dest(build_folder.root))
|
||||
;
|
||||
});
|
||||
|
||||
|
||||
// cleans the build folder
|
||||
gulp.task('clean:dev', function() {
|
||||
return del.sync([
|
||||
build_folder.styles,
|
||||
build_folder.pages,
|
||||
build_folder.root+'/*.html'
|
||||
]);
|
||||
});
|
||||
// gulp.task('favicon', function() {
|
||||
// return gulp.src('source/favicon.ico')
|
||||
// .pipe(plumbError())
|
||||
// .pipe(gulp.dest(output.root))
|
||||
// ;
|
||||
// });
|
||||
|
||||
// Gather dependencies for tools
|
||||
function vendor() {
|
||||
return src(input.vendor)
|
||||
.pipe(plumber())
|
||||
.pipe(dest(output.vendor))
|
||||
}
|
||||
// copy vendor files
|
||||
// gulp.task('vendor', function() {
|
||||
// return gulp.src(input.vendor)
|
||||
// .pipe(plumbError())
|
||||
// .pipe(gulp.dest(output.vendor))
|
||||
// ;
|
||||
// });
|
||||
|
||||
function overview() {
|
||||
watch([input.screens, input.data.watch], series(nunjucks, reload));
|
||||
watch(input.style, series(styleLint, style, reload));
|
||||
watch(input.code, series(codeLint, code, reload));
|
||||
watch(input.fonts, series(fonts, reload));
|
||||
watch([input.art.favicons, input.art.sprites, input.art.images], series(art, reload));
|
||||
// watch(input.data.app, series(json, reload));
|
||||
}
|
||||
|
||||
const assets = parallel(fonts, art, vendor);
|
||||
const build = series(clean, assets, parallel(nunjucks, series(styleLint, style), series(codeLint, code)));
|
||||
|
||||
exports.lint = parallel(styleLint, codeLint);
|
||||
exports.assets = assets;
|
||||
exports.build = build;
|
||||
exports.default = series(build, serve, overview);
|
||||
// watch over changes and react
|
||||
// split up into sub tasks
|
||||
gulp.task('watch-js', ['lint:js', 'js'], browsersync.reload);
|
||||
// gulp.task('watch-js', ['lint:js', 'js'], server.reload);
|
||||
//
|
||||
// gulp.task('overwatch', function() {
|
||||
// gulp.watch('source/code/**/*.js', ['watch-js'])
|
||||
// gulp.watch('source/style/**/*.+(scss|sass)', ['sass', 'lint:scss']);
|
||||
// gulp.watch([
|
||||
// 'source/templates/**/*',
|
||||
// 'source/screens/**/*.+(html|njk)',
|
||||
// 'source/demo_data.json'
|
||||
// ], ['nunjucks']);
|
||||
// gulp.watch('source/art/**/*', ['sprites']);
|
||||
// });
|
||||
//
|
||||
//
|
||||
// // The default task (called when you run `gulp` from cli)
|
||||
// gulp.task('default', function(callback) {
|
||||
// sequencer(
|
||||
// 'clean:dev',
|
||||
// ['sprites', 'art', 'vendor', 'favicon', 'lint:js', 'lint:scss'],
|
||||
// ['sass', 'js', 'nunjucks'],
|
||||
// ['syncreload', 'overwatch'],
|
||||
// callback
|
||||
// )
|
||||
// });
|
||||
|
||||
gulp.task('overwatch', function() {
|
||||
gulp.watch('source/code/**/*.js', ['watch-js'])
|
||||
gulp.watch('source/style/**/*.+(scss|sass)', ['sass', 'lint:scss']);
|
||||
gulp.watch([
|
||||
'source/templates/**/*',
|
||||
'source/pages/**/*.+(html|njk)',
|
||||
'source/demo_data.json'
|
||||
], ['nunjucks']);
|
||||
gulp.watch('source/art/**/*', ['sprites']);
|
||||
});
|
||||
|
||||
|
||||
// The default task (called when you run `gulp` from cli)
|
||||
gulp.task('default', function(callback) {
|
||||
sequencer(
|
||||
'clean:dev',
|
||||
['sprites', 'art', 'vendor', 'favicon', 'lint:js', 'lint:scss'],
|
||||
['sass', 'js', 'nunjucks'],
|
||||
['syncreload', 'overwatch'],
|
||||
callback
|
||||
)
|
||||
});
|
||||
|
||||
|
||||
function plumbError(errTitle) {
|
||||
return plumber({
|
||||
errorHandler: notify.onError({
|
||||
// Customizing error title
|
||||
title: errTitle || "Error running Gulp",
|
||||
message: "<%= error.message %>"
|
||||
})
|
||||
});
|
||||
}
|
||||
// function plumbError(errTitle) {
|
||||
// return plumber({
|
||||
// errorHandler: notify.onError({
|
||||
// // Customizing error title
|
||||
// title: errTitle || "GULP GENERAL PROBLEM",
|
||||
// message: "<%= error.message %>"
|
||||
// })
|
||||
// });
|
||||
// }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue