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.
113 lines
3.4 KiB
113 lines
3.4 KiB
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']));
|