gulpTasks-libraries.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // Gulp Tools
  2. var gulp = require("gulp");
  3. var webpack = require('webpack');
  4. var webpackStream = require("webpack-stream");
  5. var dtsBundle = require('dts-bundle');
  6. var merge2 = require("merge2");
  7. var path = require("path");
  8. var processShaders = require("../helpers/gulp-processShaders");
  9. // Gulp Helpers
  10. var processDeclaration = require('../helpers/gulp-processTypescriptDeclaration');
  11. var rmDir = require("../helpers/gulp-rmDir");
  12. // Import Build Config
  13. var config = require("../config.json");
  14. /**
  15. * Build a single library (one of the material of mat lib) from a module (materialsLibrary for instance)
  16. */
  17. var buildExternalLibrary = function(library, settings, cb) {
  18. var task = gulp.src(settings.build.srcDirectory + "**/*.fx")
  19. .pipe(processShaders());
  20. task.on("end", function() {
  21. const sequence = [];
  22. var outputDirectory = config.build.outputDirectory + settings.build.distOutputDirectory;
  23. // Webpack Config.
  24. var wpConfig = require(settings.build.webpack);
  25. wpConfig.entry = {
  26. 'main': path.resolve(wpConfig.context, library.entry),
  27. };
  28. wpConfig.output.filename = library.output;
  29. // Generate minified file.
  30. let wpBuildMin = webpackStream(wpConfig, webpack);
  31. let buildEventMin = wpBuildMin.pipe(gulp.dest(outputDirectory));
  32. sequence.push(buildEventMin);
  33. // Generate unminified file.
  34. wpConfig.mode = "development";
  35. wpConfig.output.filename = wpConfig.output.filename.replace(".min", "");
  36. let wpBuildMax = webpackStream(wpConfig, webpack);
  37. let buildEventMax = wpBuildMax.pipe(gulp.dest(outputDirectory));
  38. sequence.push(buildEventMax);
  39. var minAndMax = merge2(sequence);
  40. // TODO. Generate all d.ts
  41. if (!library.preventLoadLibrary) {
  42. minAndMax.on("end", function() {
  43. dtsBundle.bundle(settings.build.dtsBundle);
  44. let fileLocation = path.join(outputDirectory, settings.build.processDeclaration.filename);
  45. processDeclaration(fileLocation, settings.build.processDeclaration);
  46. });
  47. }
  48. minAndMax.on("end", cb);
  49. });
  50. return task;
  51. }
  52. /**
  53. * Dynamic module creation In Serie for WebPack leaks.
  54. */
  55. function buildExternalLibraries(settings) {
  56. var tasks = settings.libraries.map(function(library) {
  57. var build = function(cb) {
  58. return buildExternalLibrary(library, settings, cb);
  59. }
  60. return build;
  61. });
  62. return gulp.series.apply(this, tasks);
  63. }
  64. /**
  65. * Dynamic module creation.
  66. */
  67. config.modules.map(function(module) {
  68. var settings = config[module];
  69. // Clean up old build files.
  70. rmDir(settings.build.dtsBundle.baseDir);
  71. // Build the libraries.
  72. gulp.task(module, buildExternalLibraries(settings));
  73. });