gulpTasks-libraries.js 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. wpConfig.output.filename = wpConfig.output.filename.replace(".min", "");
  42. let wpBuildMax = webpackStream(wpConfig, webpack);
  43. let buildEventMax = wpBuildMax.pipe(gulp.dest(outputDirectory));
  44. sequence.push(buildEventMax);
  45. return merge2(sequence)
  46. .on("end", function() {
  47. // TODO. Generate all d.ts
  48. if (!library.preventLoadLibrary) {
  49. dtsBundle.bundle(settings.build.dtsBundle);
  50. let fileLocation = path.join(outputDirectory, settings.build.processDeclaration.filename);
  51. processDeclaration(fileLocation, settings.build.processDeclaration);
  52. }
  53. cb();
  54. });
  55. }
  56. /**
  57. * Dynamic module creation In Serie for WebPack leaks.
  58. */
  59. function buildExternalLibraries(settings) {
  60. // Clean up old build files.
  61. rmDir(settings.build.dtsBundle.baseDir);
  62. // Creates the required tasks.
  63. var tasks = [];
  64. for (var library of settings.libraries) {
  65. var shaders = function() { return buildShaders(settings); };
  66. var build = function(cb) { return buildExternalLibrary(library, settings, cb) };
  67. tasks.push(shaders, build);
  68. }
  69. return gulp.series.apply(this, tasks);
  70. }
  71. /**
  72. * Dynamic module creation.
  73. */
  74. config.modules.map(function(module) {
  75. const settings = config[module];
  76. gulp.task(module, buildExternalLibraries(settings));
  77. });