Skip to content

Instantly share code, notes, and snippets.

@truongluu
Created December 9, 2022 08:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save truongluu/c00cfb8b23ddb3ecfb6b35ee9cc13f7d to your computer and use it in GitHub Desktop.
Save truongluu/c00cfb8b23ddb3ecfb6b35ee9cc13f7d to your computer and use it in GitHub Desktop.
Gulp configs for WP
var gulp = require('gulp'),
sass = require('gulp-sass')(require('sass')),
livereload = require('gulp-livereload'),
concat = require('gulp-concat'),
uglify = require('gulp-uglify'),
dest = require('gulp-dest'),
order = require('gulp-order'),
sourcemaps = require('gulp-sourcemaps'),
autoprefixer = require('gulp-autoprefixer')
rename = require('gulp-rename'),
flatmap = require('gulp-flatmap'),
path = require('path');
var theme = 'wp-content/themes/WPTHEMENAME/';
/* ===== Regular theme tasks ===== */
gulp.task('sass', function(){
return gulp.src(theme + 'src/scss/**/*.scss')
// .pipe(sourcemaps.init())
.pipe( sass({
outputStyle: 'compressed'
}).on( 'error', sass.logError ) )
// .pipe( sourcemaps.write('.') )
.pipe( gulp.dest(theme + 'assets/css') )
.pipe( livereload() )
});
gulp.task('php', function(){
return gulp.src(theme + '**/*.php')
.pipe(livereload())
});
gulp.task('js', function(){
return gulp.src(theme + 'src/js/general/**/*.js')
.pipe( order([
'libs/*.js',
'*.js'
]) )
.pipe( concat(theme + 'assets/js/scripts.js') )
.pipe( gulp.dest('.') )
.pipe( uglify({ mangle: true }) )
.pipe( dest('', { ext: '.min.js' }) )
.pipe( gulp.dest('.') )
.pipe( livereload() )
});
gulp.task('js-partial', function(){
return gulp.src(theme + 'src/js/partial/*/', { base: '.' })
.pipe(flatmap(function(stream, dir) {
return gulp.src(dir.path + '/**/*.js')
.pipe( order([
'vendor/*.js',
'*.js'
]) )
.pipe( concat( 'scripts.js') )
.pipe( gulp.dest( theme + 'assets/js/partials/' + path.basename(dir.path) ) )
.pipe( uglify({ mangle: true }) )
.pipe( dest('', { ext: '.min.js' }) )
.pipe( gulp.dest( theme + 'assets/js/partials/' + path.basename(dir.path) ) )
}))
});
gulp.task('autoprefixer', function(){
return gulp.src(theme + 'assets/css/style.css')
.pipe(autoprefixer())
.pipe(gulp.dest(theme + 'assets/css'))
});
/* ===== Block editor specific tasks ===== */
gulp.task('sass-blocks', function(){
return gulp.src(theme + 'template-parts/blocks/*/css/src/*.scss', { base: '.' })
.pipe( sass({
outputStyle: 'compressed'
}).on( 'error', sass.logError ) )
.pipe(rename(function(file) {
file.dirname = file.dirname.replace(/src$/, "output");
}))
.pipe( gulp.dest('.') )
.pipe( livereload() )
});
gulp.task('js-blocks', function(){
return gulp.src(theme + 'template-parts/blocks/*/', { base: '.' })
.pipe(flatmap(function(stream, dir) {
return gulp.src(dir.path + '/js/src/**/*.js')
.pipe( order([
'libs/*.js',
'*.js'
]) )
.pipe( concat( 'scripts.js') )
.pipe( gulp.dest(path.relative(dir.base, dir.path) + '/js/output/') )
.pipe( uglify({ mangle: true }) )
.pipe( dest('', { ext: '.min.js' }) )
.pipe(gulp.dest(path.relative(dir.base, dir.path) + '/js/output/'))
}))
.pipe( livereload() )
});
gulp.task('watch', function(){
livereload.listen();
gulp.watch(theme + 'src/scss/**/*.scss', gulp.series('sass', 'autoprefixer'));
gulp.watch(theme + 'template-parts/blocks/*/css/src/*.scss', gulp.series('sass-blocks'));
gulp.watch(theme + '**/*.php', gulp.series('php'));
gulp.watch(theme + 'src/js/general/**/*.js', gulp.series('js'));
gulp.watch(theme + 'src/js/partial/**/*.js', gulp.series('js-partial'));
gulp.watch(theme + 'template-parts/blocks/*/js/src/*.js', gulp.series('js-blocks'));
});
gulp.task('build', gulp.series( gulp.series('sass', 'autoprefixer'), 'sass-blocks', 'js', 'js-partial', 'js-blocks' ));
gulp.task('default', gulp.series('watch'));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment