diff options
Diffstat (limited to 'gulpfile.js')
-rw-r--r-- | gulpfile.js | 133 |
1 files changed, 72 insertions, 61 deletions
diff --git a/gulpfile.js b/gulpfile.js index 3767b2f..b45595c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,73 +1,84 @@ -var pipeline = require('readable-stream').pipeline; -var del = require('del'); -var gulp = require('gulp'); -var sourcemaps = require('gulp-sourcemaps'); -var babel = require('gulp-babel'); -var uglify = require('gulp-uglify'); -var sass = require('gulp-sass'); -sass.compiler = require('node-sass'); -var postcss = require('gulp-postcss'); -var autoprefixer = require('autoprefixer'); -var cssnano = require('cssnano'); -var rename = require('gulp-rename'); +const gulp = require('gulp'); -function devJs() { - return pipeline( - gulp.src('assets/js/fuji.js'), - sourcemaps.init(), - babel({ - presets: ['@babel/env'], - }), - rename({ suffix: '.min' }), - sourcemaps.write('.'), - gulp.dest('static/assets/js/') - ); -} +const sourcemaps = require('gulp-sourcemaps'); +const babel = require('gulp-babel'); +const uglify = require('gulp-uglify'); + +const sass = require('gulp-sass'); +sass.compiler = require('sass'); +const postcss = require('gulp-postcss'); +const autoprefixer = require('autoprefixer'); +const cleanCSS = require('gulp-clean-css'); -function devCss() { - return pipeline( - gulp.src('assets/scss/fuji.scss'), - sourcemaps.init(), - sass(), - postcss([autoprefixer()]), - rename({ suffix: '.min' }), - sourcemaps.write('.'), - gulp.dest('static/assets/css/') - ); +const fs = require('fs'); +const path = require('path'); +const env = process.env.NODE_ENV; + +// Clean files generated in last build +function clean() { + try { + fs.rmdirSync(path.resolve(__dirname, 'static/assets/css'), { recursive: true }); + } catch (e) {} + try { + fs.rmdirSync(path.resolve(__dirname, 'static/assets/js'), { recursive: true }); + } catch (e) {} + return Promise.resolve(); } +// Build js function js() { - return pipeline( - gulp.src('assets/js/fuji.js'), - babel({ - presets: ['@babel/env'], - }), - uglify(), - rename({ suffix: '.min' }), - gulp.dest('static/assets/js/') - ); + let src = gulp.src('./assets/js/fuji.js'); + if (env === 'development') { + src = src.pipe(sourcemaps.init()); + } + src = src.pipe(babel({ presets: ['@babel/env'] })).pipe(uglify()); + if (env === 'development') { + src = src.pipe(sourcemaps.write('.')); + } + src = src.pipe(gulp.dest('./static/assets/js')); + return src; } +// Build css function css() { - return pipeline( - gulp.src('assets/scss/fuji.scss'), - sass(), - postcss([autoprefixer(), cssnano()]), - rename({ suffix: '.min' }), - gulp.dest('static/assets/css/') - ); + let src = gulp.src('./assets/scss/fuji.scss'); + if (env === 'development') { + src = src.pipe(sourcemaps.init()); + } + src = src + .pipe(sass({ includePaths: ['./node_modules'] }).on('error', sass.logError)) + .pipe(postcss([autoprefixer()])) + .pipe(cleanCSS()); + if (env === 'development') { + src = src.pipe(sourcemaps.write('.')); + } + src = src.pipe(gulp.dest('./static/assets/css')); + return src; } -function clean() { - return del(['static/assets/css/fuji.min.css.map', 'static/assets/js/fuji.min.js.map']); +function endprocess() { + // Rename files + try { + fs.renameSync( + path.resolve(__dirname, 'static/assets/css/fuji.css'), + path.resolve(__dirname, 'static/assets/css/fuji.min.css') + ); + } catch (e) {} + try { + fs.renameSync( + path.resolve(__dirname, 'static/assets/js/fuji.js'), + path.resolve(__dirname, 'static/assets/js/fuji.min.js') + ); + } catch (e) {} + return Promise.resolve(); +} + +exports.compile = gulp.series(clean, gulp.parallel(css, js), endprocess); + +// Live compile when development +function watch() { + gulp.watch('assets/js/*.js', { delay: 1000 }, gulp.series(js, endprocess)); + gulp.watch('assets/**/*.scss', { delay: 1000 }, gulp.series(css, endprocess)); } -exports.build = gulp.parallel(js, css, clean); -exports.devJs = function () { - devJs(); - return gulp.watch('assets/js/fuji.js', { delay: 500 }, devJs); -}; -exports.devCss = function () { - devJs(); - return gulp.watch('assets/**/*.scss', { delay: 500 }, devCss); -}; +exports.dev = gulp.series(clean, gulp.parallel(css, js), endprocess, watch); |