build-script.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. const { parallel, src, dest } = require( 'gulp' );
  2. const rollup = require( 'rollup' ).rollup;
  3. const typescript = require( 'rollup-plugin-typescript2' );
  4. const rename = require( 'ts-transformer-properties-rename' ).default;
  5. const uglify = require( 'rollup-plugin-uglify' ).uglify;
  6. const babel = require( '@rollup/plugin-babel' );
  7. const resolve = require( '@rollup/plugin-node-resolve' ).nodeResolve;
  8. const gzip = require( 'gulp-gzip' );
  9. const path = require( 'path' );
  10. const banner = require( './constants/banner' );
  11. const { promises: fs } = require( 'fs' );
  12. function buildScript( type, minify ) {
  13. const file = buildFilename( type, minify );
  14. const input = `./src/js/build/${ type }/${ type }.ts`;
  15. const plugins = [
  16. resolve(),
  17. typescript( {
  18. transformers: [
  19. service => ( {
  20. before: [
  21. rename( service.getProgram(), { internalPrefix: '' } ),
  22. ],
  23. after : [],
  24. } ),
  25. ],
  26. } ),
  27. babel.getBabelOutputPlugin( {
  28. configFile: path.resolve( __dirname, '../.babelrc' ),
  29. allowAllFormats: true,
  30. } ),
  31. ];
  32. if ( minify ) {
  33. plugins.push(
  34. uglify( {
  35. output: {
  36. comments: /^!/,
  37. },
  38. mangle: {
  39. properties: {
  40. regex: /^_(private)_/,
  41. },
  42. },
  43. } ),
  44. );
  45. }
  46. return rollup( { input, plugins } )
  47. .then( bundle => {
  48. return bundle.write( {
  49. banner,
  50. file,
  51. format : 'umd',
  52. name : 'Splide',
  53. sourcemap: ! minify,
  54. } );
  55. } ).then( () => {
  56. if ( minify ) {
  57. return src( file )
  58. .pipe( gzip() )
  59. .pipe( dest( './dist/js/' ) );
  60. }
  61. } );
  62. }
  63. function buildFilename( type, minify ) {
  64. if ( type === 'default' ) {
  65. return `./dist/js/splide${ minify ? '.min' : '' }.js`;
  66. }
  67. return `./dist/js/splide-${ type }${ minify ? '.min' : '' }.js`;
  68. }
  69. function buildModule( format, declaration ) {
  70. const declarationDir = './dist/types';
  71. const options = declaration ? {
  72. check: false,
  73. useTsconfigDeclarationDir: true,
  74. tsconfigOverride: {
  75. compilerOptions: {
  76. declarationDir,
  77. declaration : true,
  78. declarationMap: true,
  79. },
  80. },
  81. } : {};
  82. return ( declaration ? fs.rmdir( declarationDir, { recursive: true } ) : Promise.resolve() ).then( () => {
  83. return rollup( {
  84. input : './src/js/index.ts',
  85. plugins: [
  86. resolve(),
  87. typescript( options ),
  88. babel.getBabelOutputPlugin( {
  89. presets: [
  90. [
  91. '@babel/preset-env',
  92. {
  93. modules: false,
  94. loose : true,
  95. }
  96. ]
  97. ],
  98. allowAllFormats: true,
  99. } ),
  100. ]
  101. } ).then( bundle => {
  102. return bundle.write( {
  103. banner,
  104. file : `./dist/js/splide.${ format }.js`,
  105. format,
  106. exports: 'named',
  107. } );
  108. } );
  109. } )
  110. }
  111. exports.buildDevCode = function buildDevCode() {
  112. return buildScript( 'default' );
  113. }
  114. exports.buildScript = parallel(
  115. function jsDefault() { return buildScript( 'default' ) },
  116. function jsMinified() { return buildScript( 'default', true ) },
  117. );
  118. exports.buildModule = parallel(
  119. function moduleCjs() { return buildModule( 'cjs' ) },
  120. function moduleEsm() { return buildModule( 'esm', true ) },
  121. );