In my current project, I have three main .scss files. Each one of them imports a lot of partials files, and sometimes, a partial files is imported in two or three of the main files.
For example: I have a main.scss and a nl-main.scss files. main.scss imports the partials _page.scss and _post.scss. nl-main.scss imports _title.scss and _post.scss. Here is my current folder structure:
css
modules
_page.scss
_post.scss
_title.scss
main.scss
nl-main.scss
And here is my current gulpfile.js setup:
var gulp = require( 'gulp' ),
sass = require( 'gulp-sass' ),
autoprefixer = require( 'gulp-autoprefixer' ),
minifycss = require( 'gulp-minify-css' ),
uglify = require( 'gulp-uglify' ),
rename = require( 'gulp-rename' ),
clean = require( 'gulp-clean' ),
concat = require( 'gulp-concat' ),
plumber = require( 'gulp-plumber' ),
notify = require( 'gulp-notify' ),
projectTitle = 'Project Name';
// styles task
gulp.task( 'styles', function() {
return gulp.src( 'src/css/main.scss' )
.pipe( plumber() )
.pipe( sass({ paths: ['src/css/'] }) )
.pipe( notify( {
title: projectTitle,
message: 'File: <%= file.relative %> was compiled!'
} ) )
.pipe( autoprefixer( 'last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4' ) )
.pipe( gulp.dest( 'dist/assets/css' ) )
.pipe( rename( { suffix: '.min' } ) )
.pipe( minifycss() )
.pipe( gulp.dest( 'dist/assets/css' ) )
.pipe( notify( {
title: projectTitle,
message: 'Minified file: <%= file.relative %> was created / updated!'
} ) )
} );
// styles task - not logged
gulp.task( 'nl-styles', function() {
return gulp.src( 'src/css/nl-main.scss' )
.pipe( plumber() )
.pipe( sass({ paths: ['src/css/'] }) )
.pipe( notify( {
title: projectTitle,
message: 'File: <%= file.relative %> was compiled!'
} ) )
.pipe( autoprefixer( 'last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4' ) )
.pipe( gulp.dest( 'dist/assets/css' ) )
.pipe( rename( { suffix: '.min' } ) )
.pipe( minifycss() )
.pipe( gulp.dest( 'dist/assets/css' ) )
.pipe( notify( {
title: projectTitle,
message: 'Minified file: <%= file.relative %> was created / updated!'
} ) )
} );
// watch task
gulp.task( 'watch', function() {
// Watch .scss files
gulp.watch( 'src/css/**/*.scss', [ 'styles', 'nl-styles' ] );
});
But, when I run gulp watch, only the nl-styles task runs.
My question is what's the best approach to make this work and runs both the tasks (or only one task, if no shared partials are modified)? Any tips on this?
Thanks!
May it's a problem with the parallel tasks. So why you don't use only one task? Try this:
// styles task
gulp.task( 'styles', function() {
return gulp.src( 'src/css/*.scss' )
.pipe( plumber() )
.pipe( sass({ paths: ['src/css/'] }) )
.pipe( notify( {
title: projectTitle,
message: 'File: <%= file.relative %> was compiled!'
} ) )
.pipe( autoprefixer( 'last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4' ) )
.pipe( gulp.dest( 'dist/assets/css' ) )
.pipe( rename( { suffix: '.min' } ) )
.pipe( minifycss() )
.pipe( gulp.dest( 'dist/assets/css' ) )
.pipe( notify( {
title: projectTitle,
message: 'Minified file: <%= file.relative %> was created / updated!'
} ) )
} );
All scss files will be compiled to css and your gulpfile is much clearer.