styles.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import config from '../config';
  2. import path from 'path';
  3. import gulp from 'gulp';
  4. import browsersync from 'browser-sync';
  5. import autoprefixer from 'autoprefixer';
  6. import cssnano from 'cssnano';
  7. import plumber from 'gulp-plumber';
  8. import sourcemaps from 'gulp-sourcemaps';
  9. import sass from 'gulp-sass';
  10. import postcss from 'gulp-postcss';
  11. import rename from 'gulp-rename';
  12. const target = config.currentTarget;
  13. /**
  14. * Transform sass / scss to css, add either source maps or minify
  15. * based on target (development / production)
  16. *
  17. * @param cb: callback handler passed by gulp, signals task completion when called
  18. */
  19. const styles = (cb) => {
  20. const scssFile = path.join(
  21. config.paths.src,
  22. config.paths.sass,
  23. `${config.fileNames.css}.scss`
  24. );
  25. const destination = path.join(
  26. config.paths.dest,
  27. config.paths.assets,
  28. config.paths.css
  29. );
  30. switch (target) {
  31. case 'development':
  32. gulp.src(scssFile)
  33. .pipe(plumber())
  34. .pipe(sourcemaps.init())
  35. .pipe(sass(config.sass[target]))
  36. .pipe(
  37. postcss([autoprefixer()])
  38. )
  39. .pipe(
  40. sourcemaps.write({
  41. sourceRoot: './'
  42. })
  43. )
  44. .pipe(gulp.dest(destination))
  45. .pipe(
  46. browsersync.reload({ stream: true })
  47. );
  48. break;
  49. case 'production':
  50. gulp.src(scssFile)
  51. .pipe(sass(config.sass[target]))
  52. .pipe(
  53. postcss([
  54. autoprefixer(),
  55. cssnano({ safe: true })
  56. ])
  57. )
  58. .pipe(
  59. rename(`${config.fileNames.css}${config.targets[target].delimiter}${config.targets[target].infix}.css`)
  60. )
  61. .pipe(gulp.dest(destination));
  62. break;
  63. default:
  64. console.error('invalid target');
  65. }
  66. cb();
  67. };
  68. export {
  69. styles
  70. };