gulpfile.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. 'use strict';
  2. /*
  3. * Dependencies.
  4. */
  5. const gulp = require( 'gulp' );
  6. const rename = require( 'gulp-rename' );
  7. const sass = require( 'gulp-dart-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 webpack = require( 'webpack' );
  15. const webpackStream = require( 'webpack-stream' );
  16. const eslint = require( 'gulp-eslint' );
  17. const gzip = require( 'gulp-gzip' );
  18. /*
  19. * Webpack config paths.
  20. */
  21. const js = {
  22. complete: {
  23. path: './build/complete/config',
  24. dest: './dist/js',
  25. },
  26. minified: {
  27. path: './build/complete/config-min',
  28. dest: './dist/js',
  29. gzip: true,
  30. },
  31. modular: {
  32. path: './build/module/config',
  33. dest: './dist/js',
  34. },
  35. };
  36. /*
  37. * Path definitions.
  38. */
  39. const css = {
  40. all: {
  41. path : './src/sass/core/*.scss',
  42. dest : './dist/css',
  43. merge: {
  44. filename: 'splide.css',
  45. path : './src/sass/themes/default/*.scss',
  46. },
  47. },
  48. core: {
  49. path: './src/sass/core/*.scss',
  50. dest: './dist/css',
  51. },
  52. default: {
  53. path : './src/sass/core/*.scss',
  54. dest : './dist/css/themes',
  55. basename: 'splide-default',
  56. merge : {
  57. filename: 'splide.css',
  58. path : './src/sass/themes/default/*.scss',
  59. },
  60. },
  61. skyblue: {
  62. path : './src/sass/core/*.scss',
  63. dest : './dist/css/themes',
  64. basename: 'splide-skyblue',
  65. merge : {
  66. filename: 'splide.css',
  67. path : './src/sass/themes/sky-blue/*.scss',
  68. },
  69. },
  70. seagreen: {
  71. path : './src/sass/core/*.scss',
  72. dest : './dist/css/themes',
  73. basename: 'splide-sea-green',
  74. merge : {
  75. filename: 'splide.css',
  76. path : './src/sass/themes/sea-green/*.scss',
  77. },
  78. },
  79. };
  80. /*
  81. * Build a script file.
  82. */
  83. gulp.task( 'build:js', done => {
  84. Object.values( js ).forEach( settings => {
  85. const stream = webpackStream( { config: require( settings.path ) }, webpack )
  86. .pipe( gulp.dest( settings.dest ) );
  87. if ( settings.gzip ) {
  88. stream.pipe( gzip() ).pipe( gulp.dest( settings.dest ) );
  89. }
  90. } );
  91. done();
  92. } );
  93. /*
  94. * Build sass files.
  95. */
  96. gulp.task( 'build:sass', done => {
  97. Object.values( css ).forEach( settings => {
  98. let stream = gulp.src( settings.path );
  99. if ( settings.merge ) {
  100. stream = merge( stream, gulp.src( settings.merge.path ) )
  101. .pipe( sassGlob() )
  102. .pipe( sass() )
  103. .pipe( concat( settings.merge.filename ) );
  104. }
  105. stream = stream
  106. .pipe( sassGlob() )
  107. .pipe( sass() )
  108. .pipe( postcss( [
  109. cssnano( { reduceIdents: false } ),
  110. autoprefixer( { overrideBrowserslist: [ '> 5%' ] } )
  111. ] ) );
  112. if ( settings.basename ) {
  113. stream = stream.pipe( rename( { basename: settings.basename } ) );
  114. }
  115. stream
  116. .pipe( rename( { suffix: '.min' } ) )
  117. .pipe( gulp.dest( settings.dest ) );
  118. } );
  119. done();
  120. } );
  121. /*
  122. * Run lint.
  123. */
  124. gulp.task( 'lint', () => {
  125. return gulp.src( [ './src/**/*.js', './tests/**/*.js' ] )
  126. .pipe( eslint( { useEslintrc: true } ) )
  127. .pipe( eslint.format() )
  128. .pipe( eslint.failAfterError() );
  129. } );