11if ( ! TASK_CONFIG . stylesheets ) return
22
3- var gulp = require ( 'gulp' )
4- var gulpif = require ( 'gulp-if' )
5- var browserSync = require ( 'browser-sync' )
6- var sass = require ( 'gulp-sass' )
7- var sourcemaps = require ( 'gulp-sourcemaps' )
8- var handleErrors = require ( '../lib/handleErrors' )
9- var autoprefixer = require ( 'gulp-autoprefixer' )
10- var projectPath = require ( '../lib/projectPath' )
11- var cssnano = require ( 'gulp-cssnano' )
3+ var gulp = require ( 'gulp' )
4+ var addPostCssPlugin = require ( '../lib/addPostCssPlugin' )
5+ var autoprefixer = require ( 'autoprefixer' )
6+ var browserSync = require ( 'browser-sync' )
7+ var cssnano = require ( 'cssnano' )
8+ var gulpif = require ( 'gulp-if' )
9+ var handleErrors = require ( '../lib/handleErrors' )
10+ var postcss = require ( 'gulp-postcss' )
11+ var projectPath = require ( '../lib/projectPath' )
12+ var sass = require ( 'gulp-sass' )
13+ var sourcemaps = require ( 'gulp-sourcemaps' )
1214
1315var sassTask = function ( ) {
1416
@@ -17,21 +19,41 @@ var sassTask = function () {
1719 dest : projectPath ( PATH_CONFIG . dest , PATH_CONFIG . stylesheets . dest )
1820 }
1921
20- if ( TASK_CONFIG . stylesheets . sass && TASK_CONFIG . stylesheets . sass . includePaths ) {
22+ if ( TASK_CONFIG . stylesheets . sass && TASK_CONFIG . stylesheets . sass . includePaths ) {
2123 TASK_CONFIG . stylesheets . sass . includePaths = TASK_CONFIG . stylesheets . sass . includePaths . map ( function ( includePath ) {
2224 return projectPath ( includePath )
2325 } )
2426 }
2527
26- var cssnanoConfig = TASK_CONFIG . stylesheets . cssnano || { }
27- cssnanoConfig . autoprefixer = false // this should always be false, since we're autoprefixing separately
28+ TASK_CONFIG . stylesheets . autoprefixer = TASK_CONFIG . stylesheets . autoprefixer || { }
29+
30+ TASK_CONFIG . stylesheets . cssnano = TASK_CONFIG . stylesheets . cssnano || { }
31+ TASK_CONFIG . stylesheets . cssnano . autoprefixer = false // this should always be false, since we're autoprefixing separately
32+
33+ TASK_CONFIG . stylesheets . postcss . options = TASK_CONFIG . stylesheets . postcss . options || { }
34+ TASK_CONFIG . stylesheets . postcss . plugins = TASK_CONFIG . stylesheets . postcss . plugins || [ ]
35+
36+ var preprocess = ! ! TASK_CONFIG . stylesheets . sass
37+
38+ // when watching files, only run once
39+ if ( ! TASK_CONFIG . stylesheets . configured ) {
40+ // ensure Autoprefixer is in the PostCSS config
41+ addPostCssPlugin ( 'autoprefixer' , autoprefixer ( TASK_CONFIG . stylesheets . autoprefixer ) )
42+
43+ if ( global . production ) {
44+ // ensure cssnano is in the PostCSS config
45+ addPostCssPlugin ( 'cssnano' , cssnano ( TASK_CONFIG . stylesheets . cssnano ) )
46+ }
47+ }
48+
49+ TASK_CONFIG . stylesheets . configured = true
2850
2951 return gulp . src ( paths . src )
3052 . pipe ( gulpif ( ! global . production , sourcemaps . init ( ) ) )
31- . pipe ( sass ( TASK_CONFIG . stylesheets . sass ) )
53+ . pipe ( gulpif ( preprocess , sass ( TASK_CONFIG . stylesheets . sass ) ) )
54+ . on ( 'error' , handleErrors )
55+ . pipe ( postcss ( TASK_CONFIG . stylesheets . postcss . plugins , TASK_CONFIG . stylesheets . postcss . options ) )
3256 . on ( 'error' , handleErrors )
33- . pipe ( autoprefixer ( TASK_CONFIG . stylesheets . autoprefixer ) )
34- . pipe ( gulpif ( global . production , cssnano ( cssnanoConfig ) ) )
3557 . pipe ( gulpif ( ! global . production , sourcemaps . write ( ) ) )
3658 . pipe ( gulp . dest ( paths . dest ) )
3759 . pipe ( browserSync . stream ( ) )
0 commit comments