build-script.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. const { parallel, src, dest } = require( 'gulp' );
  2. const rollup = require( 'rollup' ).rollup;
  3. const uglify = require( 'rollup-plugin-uglify' ).uglify;
  4. const babel = require( '@rollup/plugin-babel' );
  5. const resolve = require( '@rollup/plugin-node-resolve' ).nodeResolve;
  6. const gzip = require( 'gulp-gzip' );
  7. const path = require( 'path' );
  8. const banner = require( './constants/banner' );
  9. function buildScript( type, minify ) {
  10. const file = buildFilename( type, minify );
  11. const input = `./src/js/build/${ type }/${ type }.js`;
  12. const plugins = [
  13. resolve(),
  14. babel.getBabelOutputPlugin( {
  15. configFile: path.resolve( __dirname, '../.babelrc' ),
  16. allowAllFormats: true,
  17. } ),
  18. ];
  19. if ( minify ) {
  20. plugins.push(
  21. uglify( {
  22. output: {
  23. comments: /^!/,
  24. },
  25. // mangle: {
  26. // properties: {
  27. // regex: /^_(private)_/,
  28. // },
  29. // },
  30. } ),
  31. );
  32. }
  33. return rollup( { input, plugins } )
  34. .then( bundle => {
  35. return bundle.write( {
  36. banner,
  37. file,
  38. format : 'umd',
  39. name : 'Splide',
  40. sourcemap: ! minify,
  41. } );
  42. } ).then( () => {
  43. if ( minify ) {
  44. return src( file )
  45. .pipe( gzip() )
  46. .pipe( dest( './dist/js/' ) );
  47. }
  48. } );
  49. }
  50. function buildFilename( type, minify ) {
  51. if ( type === 'default' ) {
  52. return `./dist/js/splide${ minify ? '.min' : '' }.js`;
  53. }
  54. return `./dist/js/splide-${ type }${ minify ? '.min' : '' }.js`;
  55. }
  56. function buildModule( format ) {
  57. return rollup( {
  58. input : './src/js/build/module/module.js',
  59. plugins: [
  60. resolve(),
  61. babel.getBabelOutputPlugin( {
  62. presets: [
  63. [
  64. '@babel/preset-env',
  65. {
  66. modules: false,
  67. loose : true,
  68. }
  69. ]
  70. ],
  71. allowAllFormats: true,
  72. } ),
  73. ]
  74. } ).then( bundle => {
  75. return bundle.write( {
  76. banner,
  77. file : `./dist/js/splide.${ format }.js`,
  78. format,
  79. exports: 'named',
  80. } );
  81. } );
  82. }
  83. exports.buildScript = parallel(
  84. function jsDefault() { return buildScript( 'default' ) },
  85. function jsMinified() { return buildScript( 'default', true ) },
  86. );
  87. exports.buildModule = parallel(
  88. function moduleCjs() { return buildModule( 'cjs' ) },
  89. function moduleEsm() { return buildModule( 'esm' ) },
  90. );