gulpfile.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. 'use strict';
  2. /*
  3. * Dependencies.
  4. */
  5. const gulp = require( 'gulp' );
  6. const rename = require( 'gulp-rename' );
  7. const sass = require( 'gulp-sass' );
  8. const sassGlob = require( 'gulp-sass-glob' );
  9. const postcss = require( 'gulp-postcss' );
  10. const autoprefixer = require( 'autoprefixer' );
  11. const cssnano = require( 'cssnano' );
  12. const merge = require( 'merge-stream' );
  13. const concat = require( 'gulp-concat' );
  14. const webpackStream = require( 'webpack-stream' );
  15. const eslint = require( 'gulp-eslint' );
  16. const gzip = require( 'gulp-gzip' );
  17. /*
  18. * Webpack config paths.
  19. */
  20. const js = {
  21. complete: {
  22. path: './build/complete/config',
  23. dest: './dist/js',
  24. gzip: true,
  25. },
  26. module: {
  27. path: './build/module/config',
  28. dest: './dist/js',
  29. },
  30. };
  31. /*
  32. * Path definitions.
  33. */
  34. const css = {
  35. all: {
  36. path : './src/sass/core/*.scss',
  37. dest : './dist/css',
  38. merge: {
  39. filename: 'splide.css',
  40. path : './src/sass/themes/default/*.scss',
  41. },
  42. },
  43. core: {
  44. path: './src/sass/core/*.scss',
  45. dest: './dist/css',
  46. },
  47. themes: {
  48. path: [
  49. './src/sass/themes/default/*.scss',
  50. ],
  51. dest: './dist/css/themes',
  52. },
  53. };
  54. /*
  55. * Build a script file.
  56. */
  57. gulp.task( 'build:js', done => {
  58. Object.values( js ).forEach( settings => {
  59. const stream = webpackStream( { config: require( settings.path ) } )
  60. .pipe( gulp.dest( settings.dest ) );
  61. if ( settings.gzip ) {
  62. stream.pipe( gzip() ).pipe( gulp.dest( settings.dest ) );
  63. }
  64. } );
  65. done();
  66. } );
  67. /*
  68. * Build sass files.
  69. */
  70. gulp.task( 'build:sass', done => {
  71. Object.values( css ).forEach( settings => {
  72. let stream = gulp.src( settings.path );
  73. if ( settings.merge ) {
  74. stream = merge( stream, gulp.src( settings.merge.path ) )
  75. .pipe( sassGlob() )
  76. .pipe( sass() )
  77. .pipe( concat( settings.merge.filename ) );
  78. }
  79. stream
  80. .pipe( sassGlob() )
  81. .pipe( sass() )
  82. .pipe( postcss( [
  83. cssnano( { reduceIdents: false } ),
  84. autoprefixer( { overrideBrowserslist: [ '> 5%' ] } )
  85. ] ) )
  86. .pipe( rename( { suffix: '.min' } ) )
  87. .pipe( gulp.dest( settings.dest ) );
  88. } );
  89. done();
  90. } );
  91. gulp.task( 'lint', () => {
  92. return gulp.src( [ './src/**/*.js', './tests/**/*.js' ] )
  93. .pipe( eslint( { useEslintrc: true } ) )
  94. .pipe( eslint.format() )
  95. .pipe( eslint.failAfterError() );
  96. } );