gulpfile.js 3.0 KB

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