styles.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. var path = require('path');
  2. var gulp = require('gulp');
  3. var sass = require('gulp-dart-sass');
  4. var postcss = require('gulp-postcss');
  5. var autoprefixer = require('autoprefixer');
  6. var cssnano = require('cssnano');
  7. var postcssCustomProperties = require('postcss-custom-properties');
  8. var postcssCalc = require('postcss-calc');
  9. var sourcemaps = require('gulp-sourcemaps');
  10. var size = require('gulp-size');
  11. var config = require('../config');
  12. var simpleCopyTask = require('../lib/simplyCopy');
  13. var renameSrcToDest = require('../lib/rename-src-to-dest');
  14. var renameSrcToDestScss = require('../lib/rename-src-to-dest-scss');
  15. var gutil = require('gulp-util');
  16. var flatten = function(arrOfArr) {
  17. return arrOfArr.reduce(function(flat, more) {
  18. return flat.concat(more);
  19. }, []);
  20. };
  21. var autoprefixerConfig = {
  22. cascade: false,
  23. };
  24. var cssnanoConfig = {
  25. discardUnused: {
  26. fontFace: false,
  27. },
  28. zindex: false,
  29. };
  30. // Copy all assets that are not CSS files.
  31. gulp.task('styles:assets', simpleCopyTask('css/**/!(*.css)'));
  32. gulp.task('styles:css', function() {
  33. var sources = config.apps.map(function(app) {
  34. return path.join(app.sourceFiles, app.appName, 'css/**/*.css');
  35. });
  36. return gulp.src(sources, {base: '.'})
  37. .pipe(postcss([
  38. cssnano(cssnanoConfig),
  39. autoprefixer(autoprefixerConfig),
  40. ]))
  41. .pipe(renameSrcToDest())
  42. .pipe(size({ title: 'Vendor CSS' }))
  43. .pipe(gulp.dest('.'))
  44. .on('error', gutil.log);
  45. });
  46. // For Sass files,
  47. gulp.task('styles:sass', function () {
  48. // Wagtail Sass files include each other across applications,
  49. // e.g. wagtailimages Sass files will include wagtailadmin/sass/mixins.scss
  50. // Thus, each app is used as an includePath.
  51. var includePaths = flatten(config.apps.map(function(app) { return app.scssIncludePaths(); }));
  52. // Not all files in a directory need to be compiled, so each app defines
  53. // its own Sass files that need to be compiled.
  54. var sources = flatten(config.apps.map(function(app) { return app.scssSources(); }));
  55. return gulp.src(sources, {base: '.'})
  56. .pipe(config.isProduction ? gutil.noop() : sourcemaps.init())
  57. .pipe(sass({
  58. errLogToConsole: true,
  59. includePaths: includePaths,
  60. outputStyle: 'expanded'
  61. }).on('error', sass.logError))
  62. .pipe(postcss([
  63. cssnano(cssnanoConfig),
  64. autoprefixer(autoprefixerConfig),
  65. postcssCustomProperties(),
  66. postcssCalc(),
  67. ]))
  68. .pipe(size({ title: 'Wagtail CSS' }))
  69. .pipe(config.isProduction ? gutil.noop() : sourcemaps.write())
  70. .pipe(renameSrcToDestScss())
  71. .pipe(gulp.dest("."))
  72. .on('error', gutil.log);
  73. });
  74. gulp.task('styles', gulp.series('styles:sass', 'styles:css', 'styles:assets'));