Skip to content

Commit

Permalink
📦 NEW: Compile multiple CSS files into different directories
Browse files Browse the repository at this point in the history
  • Loading branch information
mintbird committed Oct 13, 2018
1 parent 63627a6 commit 670cd0f
Show file tree
Hide file tree
Showing 3 changed files with 132 additions and 2 deletions.
120 changes: 119 additions & 1 deletion src/gulpfile.babel.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ const cache = require( 'gulp-cache' ); // Cache files in stream for later use.
const remember = require( 'gulp-remember' ); // Adds all the files it has ever seen back into the stream.
const plumber = require( 'gulp-plumber' ); // Prevent pipe breaking caused by errors from gulp plugins.
const beep = require( 'beepbeep' );
const merge = require( 'merge-stream' );

/**
* Custom Error Handler.
Expand Down Expand Up @@ -143,6 +144,63 @@ gulp.task( 'styles', () => {
.pipe( notify({ message: '\n\n✅ ===> STYLES — completed!\n', onLast: true }) );
});

/**
* Task: `addonStyles`.
*
* Compiles Sass, Autoprefixes it and Minifies CSS.
*
* This task does the following:
* 1. Gets the source scss file
* 2. Compiles Sass to CSS
* 3. Writes Sourcemaps for it
* 4. Autoprefixes it and generates CSS file
* 5. Renames the CSS file with suffix .min.css
* 6. Minifies the CSS file and generates .min.css
* 7. Injects CSS or reloads the browser via browserSync
*/
gulp.task( 'addonStyles', ( done ) => {
// Exit task when no addon styles
if ( config.addonStyles.length === 0 ) {
return done();
}

// Process each addon style
var tasks = config.addonStyles.map( function ( addon ) {

return gulp
.src( addon.styleSRC, { allowEmpty: true })
.pipe( plumber( errorHandler ) )
.pipe( sourcemaps.init() )
.pipe(
sass({
errLogToConsole: config.errLogToConsole,
outputStyle: config.outputStyle,
precision: config.precision
})
)
.on( 'error', sass.logError )
.pipe( sourcemaps.write({ includeContent: false }) )
.pipe( sourcemaps.init({ loadMaps: true }) )
.pipe( autoprefixer( config.BROWSERS_LIST ) )
.pipe( sourcemaps.write( './' ) )
.pipe( lineec() ) // Consistent Line Endings for non UNIX systems.
.pipe( gulp.dest( addon.styleDestination ) )
.pipe( filter( '**/*.css' ) ) // Filtering stream to only css files.
.pipe( mmq({ log: true }) ) // Merge Media Queries only for .min.css version.
.pipe( browserSync.stream() ) // Reloads CSS file if that is enqueued.
.pipe( rename({ suffix: '.min' }) )
.pipe( minifycss({ maxLineLen: 10 }) )
.pipe( lineec() ) // Consistent Line Endings for non UNIX systems.
.pipe( gulp.dest( addon.styleDestination ) )
.pipe( filter( '**/*.css' ) ) // Filtering stream to only css files.
.pipe( browserSync.stream() ) // Reloads .min.css if that is enqueued.
.pipe( notify({ message: '\n\n✅ ===> ADDON STYLES — completed!\n', onLast: true }) );

} );

return merge( tasks );
});

/**
* Task: `stylesRTL`.
*
Expand Down Expand Up @@ -191,6 +249,66 @@ gulp.task( 'stylesRTL', () => {
.pipe( notify({ message: '\n\n✅ ===> STYLES RTL — completed!\n', onLast: true }) );
});

/**
* Task: `addonStylesRTL`.
*
* Compiles Sass, Autoprefixes it, Generates RTL stylesheet, and Minifies CSS.
*
* This task does the following:
* 1. Gets the source scss file
* 2. Compiles Sass to CSS
* 4. Autoprefixes it and generates style.css
* 5. Renames the CSS file with suffix -rtl and generates -rtl.css
* 6. Writes Sourcemaps for -rtl.css
* 7. Renames the CSS files with suffix .min.css
* 8. Minifies the CSS file and generates -rtl.min.css
* 9. Injects CSS or reloads the browser via browserSync
*/
gulp.task( 'addonStylesRTL', ( done ) => {
// Exit task when no addon styles
if ( config.addonStyles.length === 0 ) {
return done();
}

// Process each addon style
var tasks = config.addonStyles.map( function ( addon ) {

return gulp
.src( addon.styleSRC, { allowEmpty: true })
.pipe( plumber( errorHandler ) )
.pipe( sourcemaps.init() )
.pipe(
sass({
errLogToConsole: config.errLogToConsole,
outputStyle: config.outputStyle,
precision: config.precision
})
)
.on( 'error', sass.logError )
.pipe( sourcemaps.write({ includeContent: false }) )
.pipe( sourcemaps.init({ loadMaps: true }) )
.pipe( autoprefixer( config.BROWSERS_LIST ) )
.pipe( lineec() ) // Consistent Line Endings for non UNIX systems.
.pipe( rename({ suffix: '-rtl' }) ) // Append "-rtl" to the filename.
.pipe( rtlcss() ) // Convert to RTL.
.pipe( sourcemaps.write( './' ) ) // Output sourcemap for -rtl.css.
.pipe( gulp.dest( addon.styleDestination ) )
.pipe( filter( '**/*.css' ) ) // Filtering stream to only css files.
.pipe( browserSync.stream() ) // Reloads .css or -rtl.css, if that is enqueued.
.pipe( mmq({ log: true }) ) // Merge Media Queries only for .min.css version.
.pipe( rename({ suffix: '.min' }) )
.pipe( minifycss({ maxLineLen: 10 }) )
.pipe( lineec() ) // Consistent Line Endings for non UNIX systems.
.pipe( gulp.dest( addon.styleDestination ) )
.pipe( filter( '**/*.css' ) ) // Filtering stream to only css files.
.pipe( browserSync.stream() ) // Reloads .css or -rtl.css, if that is enqueued.
.pipe( notify({ message: '\n\n✅ ===> ADDON STYLES RTL — completed!\n', onLast: true }) );

} );

return merge( tasks );
});

/**
* Task: `vendorsJS`.
*
Expand Down Expand Up @@ -357,7 +475,7 @@ gulp.task(
'default',
gulp.parallel( 'styles', 'vendorsJS', 'customJS', 'images', browsersync, () => {
gulp.watch( config.watchPhp, reload ); // Reload on PHP file changes.
gulp.watch( config.watchStyles, gulp.parallel( 'styles' ) ); // Reload on SCSS file changes.
gulp.watch( config.watchStyles, gulp.parallel( 'styles', 'addonStyles' ) ); // Reload on SCSS file changes.
gulp.watch( config.watchJsVendor, gulp.series( 'vendorsJS', reload ) ); // Reload on vendorsJS file changes.
gulp.watch( config.watchJsCustom, gulp.series( 'customJS', reload ) ); // Reload on customJS file changes.
gulp.watch( config.imgSRC, gulp.series( 'images', reload ) ); // Reload on customJS file changes.
Expand Down
5 changes: 4 additions & 1 deletion src/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,15 @@
"gulp-sourcemaps": "^2.6.2",
"gulp-uglify": "^3.0.0",
"gulp-uglifycss": "^1.0.6",
"gulp-wp-pot": "^2.0.7"
"gulp-wp-pot": "^2.0.7",
"merge-stream": "^1.0.1"
},
"scripts": {
"start": "gulp",
"styles": "gulp styles",
"addonStyles": "gulp addonStyles",
"stylesRTL": "gulp stylesRTL",
"addonStylesRTL": "gulp addonStylesRTL",
"vendorsJS": "gulp vendorsJS",
"customJS": "gulp customJS",
"images": "gulp images",
Expand Down
9 changes: 9 additions & 0 deletions src/wpgulp.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,15 @@ module.exports = {
errLogToConsole: true,
precision: 10,

// Add-on Style options
// The following list is a set of SCSS/CSS files which you want to process and place it on a different folder.
addonStyles: [
{
styleSRC: './assets/css/addon.scss', // Path to .scss file.
styleDestination: './', // Path to place the compiled CSS file. Default set to root folder.
},
],

// JS Vendor options.
jsVendorSRC: './assets/js/vendor/*.js', // Path to JS vendor folder.
jsVendorDestination: './assets/js/', // Path to place the compiled JS vendors file.
Expand Down

0 comments on commit 670cd0f

Please sign in to comment.