gulpTasks-libraries.js 3.0 KB

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