8
0

build.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /* jshint node: true, esnext: true */
  2. 'use strict';
  3. const path = require( 'path' );
  4. const gulp = require( 'gulp' );
  5. const del = require( 'del' );
  6. const merge = require( 'merge-stream' );
  7. // const runSequence = require( 'run-sequence' );
  8. const watch = require( 'gulp-watch' );
  9. const utils = require( './utils' );
  10. const sep = path.sep;
  11. module.exports = ( config ) => {
  12. const distDir = path.join( config.ROOT_DIR, config.DIST_DIR );
  13. const tasks = {
  14. clean() {
  15. return del( distDir );
  16. },
  17. src: {
  18. all() {
  19. return merge( tasks.src.main(), tasks.src.ckeditor5(), tasks.src.modules() );
  20. },
  21. main() {
  22. const srcDir = path.join( config.ROOT_DIR, 'ckeditor.js' );
  23. return gulp.src( srcDir )
  24. .pipe( watch( srcDir ) );
  25. },
  26. ckeditor5() {
  27. const srcDir = path.join( config.ROOT_DIR, 'src/**/*.js' );
  28. return gulp.src( srcDir )
  29. .pipe( watch( srcDir ) )
  30. .pipe( utils.wrapCKEditor5Module() );
  31. },
  32. modules() {
  33. const srcDir = path.join( config.ROOT_DIR, 'node_modules/ckeditor5-*/src/**/*.js' );
  34. const modulePathPattern = new RegExp( `node_modules${ sep }(ckeditor5-[^${ sep }]+)${ sep }src` );
  35. return gulp.src( srcDir )
  36. .pipe( watch( srcDir ) )
  37. .pipe( utils.unpackModules( modulePathPattern ) );
  38. }
  39. }
  40. };
  41. gulp.task( 'build:clean', tasks.clean );
  42. // gulp.task( 'build:copy', ( callback ) => {
  43. // runSequence(
  44. // 'build:clean',
  45. // [ 'build:copy:main', 'build:copy:ckeditor5', 'build:copy:modules' ],
  46. // callback
  47. // );
  48. // } );
  49. // gulp.task( 'build:transpile', [ 'build:copy' ], tasks.transpile );
  50. gulp.task( 'build:watch', () => {
  51. const codeStream = tasks.src.all()
  52. .on( 'data', ( file ) => {
  53. console.log( `Processing ${ file.path }...` );
  54. } );
  55. const esNextStream = utils.fork( codeStream )
  56. .pipe( utils.dist( distDir, 'esnext' ) );
  57. const amdStream = utils.fork( codeStream )
  58. .pipe( utils.transpile( 'amd' ) )
  59. .pipe( utils.dist( distDir, 'amd' ) );
  60. const cjsStream = utils.fork( codeStream )
  61. .pipe( utils.transpile( 'cjs' ) )
  62. .pipe( utils.dist( distDir, 'cjs' ) );
  63. return merge( esNextStream, amdStream, cjsStream )
  64. // Unfortunately it gets triggered 3x per each file (what makes sense), but with a single path (cjs).
  65. // I guess that it will be better to listen on amd/cjs streams because while the watcher is on you either
  66. // need one or the other.
  67. .on( 'data', ( file ) => {
  68. console.log( `Finished writing ${ file.path }...` );
  69. } );
  70. } );
  71. return tasks;
  72. };