You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
4.5 KiB
145 lines
4.5 KiB
let fs = require('fs'),
|
|
gulp = require('gulp'),
|
|
concat = require('gulp-concat'),
|
|
rename = require('gulp-rename'),
|
|
cssmin = require('gulp-cssnano'),
|
|
prefix = require('gulp-autoprefixer'),
|
|
plumber = require('gulp-plumber'),
|
|
sass = require('gulp-sass'),
|
|
minify = require('gulp-minify'),
|
|
notify = require('gulp-notify'),
|
|
size = require('gulp-size'),
|
|
cached = require('gulp-cached'),
|
|
fileInclude = require('gulp-file-include'),
|
|
sourcemaps = require('gulp-sourcemaps'),
|
|
spritesmith = require('gulp.spritesmith');
|
|
|
|
|
|
let packageFile = JSON.parse(fs.readFileSync('source.info.json'));
|
|
let source = packageFile.source;
|
|
let destPath = packageFile.destPath;
|
|
let watchPath = packageFile.watch;
|
|
|
|
function reloadSourceData()
|
|
{
|
|
packageFile = JSON.parse(fs.readFileSync('source.info.json'));
|
|
source = packageFile.source;
|
|
destPath = packageFile.destPath;
|
|
watchPath = packageFile.watch;
|
|
}
|
|
|
|
let displayError = function(error) {
|
|
// Initial building up of the error
|
|
var errorString = '[' + error.plugin.error.bold + ']';
|
|
errorString += ' ' + error.message.replace("\n",''); // Removes new line at the end
|
|
|
|
// If the error contains the filename or line number add it to the string
|
|
if(error.fileName)
|
|
errorString += ' in ' + error.fileName;
|
|
|
|
if(error.lineNumber)
|
|
errorString += ' on line ' + error.lineNumber.bold;
|
|
|
|
// This will output an error like the following:
|
|
// [gulp-sass] error message in file_name on line 1
|
|
console.error(errorString);
|
|
};
|
|
|
|
let onError = function(err) {
|
|
notify.onError({
|
|
title: "Gulp",
|
|
subtitle: "Failure!",
|
|
message: "Error: <%= error.message %>",
|
|
sound: "Basso"
|
|
})(err);
|
|
this.emit('end');
|
|
};
|
|
|
|
/**********************************************************************************************************
|
|
* TASKS
|
|
***********************************************************************************************************/
|
|
gulp.task('html', function(){
|
|
reloadSourceData();
|
|
|
|
let dest = destPath.root + "/";
|
|
|
|
return gulp.src(source.html)
|
|
.pipe(fileInclude({
|
|
prefix : '@@',
|
|
context : {
|
|
ROOT : '.'
|
|
}
|
|
}))
|
|
.pipe(cached('include'))
|
|
.pipe(size({ gzip:true, showFiles:true }))
|
|
.pipe(gulp.dest(dest));
|
|
});
|
|
|
|
|
|
gulp.task('scss:compile', function () {
|
|
reloadSourceData();
|
|
|
|
let dest = destPath.root + "/" + destPath.assets + "/" + destPath.css;
|
|
|
|
return gulp.src( source.css )
|
|
.pipe(plumber({errorHandler: onError}))
|
|
.pipe(sourcemaps.init())
|
|
.pipe( sass({outputStyle: 'expanded'}).on('error', sass.logError))
|
|
.pipe( prefix({}))
|
|
.pipe( rename('style.css'))
|
|
.pipe(gulp.dest(dest))
|
|
.pipe(cssmin( { "discardComments": { "removeAll": true } }))
|
|
.pipe(rename({ suffix: '.min' }))
|
|
.pipe(sourcemaps.write('.'))
|
|
.pipe(gulp.dest(dest));
|
|
});
|
|
|
|
|
|
gulp.task('js:combine', function(){
|
|
reloadSourceData();
|
|
|
|
let dest = destPath.root + "/" + destPath.assets + "/" + destPath.js;
|
|
let fileName = "common.js";
|
|
|
|
return gulp.src( source.js )
|
|
.pipe(sourcemaps.init())
|
|
.pipe(concat(fileName))
|
|
.pipe(minify({ext: {min : '.min.js'},noSource:true}))
|
|
.pipe(size({ gzip: true, showFiles: true }))
|
|
.pipe(sourcemaps.write('.'))
|
|
.pipe(gulp.dest(dest));
|
|
});
|
|
|
|
gulp.task('sprite', function () {
|
|
reloadSourceData();
|
|
|
|
var spriteData = null;
|
|
let dest = destPath.root + "/" + destPath.assets + "/icons";
|
|
|
|
var packages = fs.readdirSync(source.icons);
|
|
for(var i in packages) {
|
|
spriteData = gulp.src('src/icons/'+packages[i]+'/*.png').pipe(spritesmith({
|
|
imgName: packages[i] + '.png',
|
|
cssName: packages[i] +'.css',
|
|
padding:2,
|
|
cssTemplate: 'src/icons/iconsTemplates.scss.handlebars',
|
|
cssHandlebarsHelpers : {'packageName' : packages[i]},
|
|
imgPath : '../icons/' + packages[i] + '.png',
|
|
algorithm:'left-right',
|
|
algorithmOpts:false
|
|
}));
|
|
spriteData.img.pipe(gulp.dest(dest));
|
|
spriteData.css.pipe(gulp.dest("src/icons/"));
|
|
}
|
|
return true;
|
|
});
|
|
|
|
gulp.task('watch', function(){
|
|
gulp.watch(watchPath.html, gulp.series(['html']));
|
|
gulp.watch(watchPath.js, gulp.series(['js:combine']));
|
|
gulp.watch(watchPath.css, gulp.series(['scss:compile']));
|
|
});
|
|
|
|
|
|
|
|
gulp.task('default', gulp.series(['html', 'js:combine', 'scss:compile']));
|