let fs = require('fs'), gulp = require('gulp'), concat = require('gulp-concat'), cleanCSS = require('gulp-clean-css'), sass = require('gulp-sass'), minify = require('gulp-minify'), 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; } /********************************************************************************************************** * 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; let fileName = "style.min.css"; return gulp.src( source.css ) .pipe(sourcemaps.init()) .pipe( sass({outputStyle: 'compact'}).on('error', sass.logError)) .pipe( concat(fileName)) //병합하고 .pipe(cleanCSS().on('error', function(e){console.log(e);})) .pipe(size({ gzip: true, showFiles: true })) .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']));