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) {
  18. const sequence = [];
  19. var outputDirectory = config.build.outputDirectory + settings.build.distOutputDirectory;
  20. var wpConfig;
  21. if (library.entry) {
  22. wpConfig = require(settings.build.webpack);
  23. wpConfig.entry = {
  24. 'main': path.resolve(wpConfig.context, library.entry),
  25. };
  26. wpConfig.output.filename = library.output;
  27. }
  28. else {
  29. wpConfig = require(library.webpack);
  30. }
  31. // Generate minified file.
  32. let wpBuildMin = webpackStream(wpConfig, webpack);
  33. let buildEventMin = wpBuildMin.pipe(gulp.dest(outputDirectory));
  34. sequence.push(buildEventMin);
  35. // Generate unminified file.
  36. wpConfig.mode = "development";
  37. wpConfig.output.filename = wpConfig.output.filename.replace(".min", "");
  38. let wpBuildMax = webpackStream(wpConfig, webpack);
  39. let buildEventMax = wpBuildMax.pipe(gulp.dest(outputDirectory));
  40. sequence.push(buildEventMax);
  41. if (library.isMain) {
  42. buildEventMin.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. return merge2(sequence);
  49. }
  50. /**
  51. * Dynamic module creation In Serie for WebPack leaks.
  52. */
  53. function buildExternalLibraries(settings) {
  54. var tasks = settings.libraries.map(function(library) {
  55. var build = function(cb) {
  56. return buildExternalLibrary(library, settings);
  57. }
  58. return build;
  59. });
  60. return gulp.series.apply(this, tasks);
  61. }
  62. /**
  63. * Dynamic module creation.
  64. */
  65. config.modules.map(function(module) {
  66. var settings = config[module];
  67. // Clean up old build files.
  68. rmDir(settings.build.dtsBundle.baseDir);
  69. // Build the libraries.
  70. gulp.task(module, buildExternalLibraries(settings));
  71. });