gulpfile.js 3.0 KB

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