gulpTasks-libraries.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // Gulp Tools
  2. var gulp = require("gulp");
  3. var webpack = require('webpack');
  4. var webpackStream = require("webpack-stream");
  5. var fs = require("fs");
  6. var dtsBundle = require('dts-bundle');
  7. var merge2 = require("merge2");
  8. var path = require("path");
  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. const sequence = [];
  19. var outputDirectory = config.build.outputDirectory + settings.build.distOutputDirectory;
  20. // Webpack Config.
  21. var wpConfig = require(settings.build.webpack);
  22. wpConfig.entry = {
  23. 'main': path.resolve(wpConfig.context, library.entry),
  24. };
  25. wpConfig.output.filename = library.output;
  26. // Generate minified file.
  27. let wpBuildMin = webpackStream(wpConfig, webpack);
  28. let buildEventMin = wpBuildMin.pipe(gulp.dest(outputDirectory));
  29. sequence.push(buildEventMin);
  30. // Generate unminified file.
  31. wpConfig.mode = "development";
  32. wpConfig.output.filename = wpConfig.output.filename.replace(".min", "");
  33. let wpBuildMax = webpackStream(wpConfig, webpack);
  34. let buildEventMax = wpBuildMax.pipe(gulp.dest(outputDirectory));
  35. sequence.push(buildEventMax);
  36. var minAndMax = merge2(sequence);
  37. // TODO. Generate all d.ts
  38. if (!library.preventLoadLibrary) {
  39. minAndMax.on("end", function() {
  40. dtsBundle.bundle(settings.build.dtsBundle);
  41. let fileLocation = path.join(outputDirectory, settings.build.processDeclaration.filename);
  42. processDeclaration(fileLocation, settings.build.processDeclaration);
  43. cb();
  44. });
  45. }
  46. return minAndMax;
  47. }
  48. /**
  49. * Dynamic module creation In Serie for WebPack leaks.
  50. */
  51. function buildExternalLibraries(settings) {
  52. var tasks = settings.libraries.map(function(library) {
  53. var build = function(cb) {
  54. return buildExternalLibrary(library, settings, cb);
  55. }
  56. return build;
  57. });
  58. return gulp.series.apply(this, tasks);
  59. }
  60. /**
  61. * Dynamic module creation.
  62. */
  63. config.modules.map(function(module) {
  64. var settings = config[module];
  65. // Clean up old build files.
  66. rmDir(settings.build.dtsBundle.baseDir);
  67. // Build the libraries.
  68. gulp.task(module, buildExternalLibraries(settings));
  69. });