gulpTasks-libraries.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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) {
  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. // TODO. Generate all d.ts
  37. if (!library.preventLoadLibrary) {
  38. buildEventMin.on("end", function() {
  39. dtsBundle.bundle(settings.build.dtsBundle);
  40. let fileLocation = path.join(outputDirectory, settings.build.processDeclaration.filename);
  41. processDeclaration(fileLocation, settings.build.processDeclaration);
  42. });
  43. }
  44. return merge2(sequence);
  45. }
  46. /**
  47. * Dynamic module creation In Serie for WebPack leaks.
  48. */
  49. function buildExternalLibraries(settings) {
  50. var tasks = settings.libraries.map(function(library) {
  51. var build = function(cb) {
  52. return buildExternalLibrary(library, settings);
  53. }
  54. return build;
  55. });
  56. return gulp.series.apply(this, tasks);
  57. }
  58. /**
  59. * Dynamic module creation.
  60. */
  61. config.modules.map(function(module) {
  62. var settings = config[module];
  63. // Clean up old build files.
  64. rmDir(settings.build.dtsBundle.baseDir);
  65. // Build the libraries.
  66. gulp.task(module, buildExternalLibraries(settings));
  67. });