8
0

tasks.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /**
  2. * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. 'use strict';
  6. const path = require( 'path' );
  7. const gulp = require( 'gulp' );
  8. const gulpCssnano = require( 'gulp-cssnano' );
  9. const gulpUglify = require( 'gulp-uglify' );
  10. const runSequence = require( 'run-sequence' );
  11. const utils = require( './utils' );
  12. const rollup = require( 'rollup' ).rollup;
  13. const rollupBabel = require( 'rollup-plugin-babel' );
  14. const rollupCommonJS = require( 'rollup-plugin-commonjs' );
  15. const rollupNodeResolve = require( 'rollup-plugin-node-resolve' );
  16. module.exports = ( config ) => {
  17. const sourceBuildDir = path.join( config.ROOT_DIR, config.BUILD_DIR, 'esnext' );
  18. const bundleDir = path.join( config.ROOT_DIR, config.BUNDLE_DIR );
  19. const entryFilePath = path.join( config.ROOT_DIR, 'dev', 'tasks', 'bundle', 'classiccreatorbundle.js' );
  20. const tasks = {
  21. /**
  22. * Remove all files from bundle directory.
  23. */
  24. clean() {
  25. return utils.clean( bundleDir, '*.*' );
  26. },
  27. /**
  28. * Combine whole editor files into two files `ckeditor.js` and `ckeditor.css`.
  29. */
  30. generate() {
  31. /**
  32. * Bundling JS by Rollup.
  33. *
  34. * At this moment we don't know a list of every dependency needed in the bundle. It is because
  35. * editor features load automatically during initialization process. To work around this problem
  36. * we have created a custom entry file where we defined some of imports with features
  37. * needed to initialize editor.
  38. *
  39. * Bundled `ckeditor.js` file exposes a global function `createEditor`.
  40. * For more details see docs from `classiccreatorbundle.js`.
  41. */
  42. function bundleJS() {
  43. const outputFile = path.join( bundleDir, config.MAIN_FILE );
  44. return rollup( {
  45. entry: entryFilePath,
  46. plugins: [
  47. rollupCommonJS( {
  48. include: 'node_modules/**'
  49. } ),
  50. rollupNodeResolve( {
  51. jsnext: true
  52. } ),
  53. rollupBabel( {
  54. presets: [ 'es2015-rollup' ]
  55. } )
  56. ]
  57. } ).then( ( bundle ) => {
  58. return bundle.write( {
  59. dest: outputFile,
  60. format: 'iife',
  61. moduleName: 'createEditor'
  62. } );
  63. } );
  64. }
  65. /**
  66. * CSS is already bundled by a build task, so we need only to copy it.
  67. */
  68. function bundleCSS() {
  69. return new Promise( ( resolve ) => {
  70. const cssSource = path.join( sourceBuildDir, 'theme', 'ckeditor.css' );
  71. utils.copyFile( cssSource, bundleDir, resolve );
  72. } );
  73. }
  74. // Lets wait for both - JS and CSS.
  75. return Promise.all( [ bundleJS(), bundleCSS() ] );
  76. },
  77. minify: {
  78. /**
  79. * JS minification by UglifyJS.
  80. */
  81. js() {
  82. let stream = gulp.src( path.join( bundleDir, config.MAIN_FILE ) )
  83. .pipe( gulpUglify() );
  84. utils.saveStreamAsMinifiedFile( stream, bundleDir );
  85. },
  86. /**
  87. * CSS minification by cssnano.
  88. */
  89. css() {
  90. let stream = gulp.src( path.join( bundleDir, 'ckeditor.css' ) )
  91. .pipe( gulpCssnano() );
  92. return utils.saveStreamAsMinifiedFile( stream, bundleDir );
  93. }
  94. }
  95. };
  96. gulp.task( 'bundle:clean', tasks.clean );
  97. gulp.task( 'bundle:generate', [ 'bundle:clean', 'build:js:esnext', 'build:themes:esnext' ], tasks.generate );
  98. gulp.task( 'bundle:minify:js', tasks.minify.js );
  99. gulp.task( 'bundle:minify:css', tasks.minify.css );
  100. gulp.task( 'bundle', ( callback ) => {
  101. runSequence( 'bundle:generate', [ 'bundle:minify:js', 'bundle:minify:css' ], () => {
  102. // Print files size on console just before the end of the task.
  103. const files = [ 'ckeditor.js', 'ckeditor.min.js', 'ckeditor.css', 'ckeditor.min.css' ];
  104. utils.logFilesSize( files, bundleDir );
  105. // Finish the task.
  106. callback();
  107. } );
  108. } );
  109. gulp.task( 'bundle:babelRuntime', tasks.customBabelRuntime );
  110. return tasks;
  111. };