gulpTasks-libraries.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // Gulp Tools
  2. var gulp = require("gulp");
  3. var webpack = require('webpack');
  4. var webpackStream = require("webpack-stream");
  5. var cp = require('child_process');
  6. var merge2 = require("merge2");
  7. var path = require("path");
  8. // Gulp Helpers
  9. var uncommentShaders = require('../helpers/gulp-removeShaderComments');
  10. var processShaders = require("../helpers/gulp-processShaders");
  11. var processAmdDeclarationToModule = require('../helpers/gulp-processAmdDeclarationToModule');
  12. var processModuleDeclarationToNamespace = require('../helpers/gulp-processModuleDeclarationToNamespace');
  13. var rmDir = require("../helpers/gulp-rmDir");
  14. // Import Build Config
  15. var config = require("../config.json");
  16. /**
  17. * Create shader ts files.
  18. */
  19. var buildShaders = function(settings) {
  20. return gulp.src(settings.build.srcDirectory + "**/*.fx")
  21. .pipe(uncommentShaders())
  22. .pipe(processShaders(settings.isCore));
  23. }
  24. /**
  25. * Build a single library (one of the material of mat lib) from a module (materialsLibrary for instance)
  26. */
  27. var buildExternalLibrariesMultiEntry = function(libraries, settings, cb) {
  28. // Convert Module to Namespace for globals
  29. const sequence = [];
  30. var outputDirectory = config.build.outputDirectory + settings.build.distOutputDirectory;
  31. var isMinOutputName = libraries[0].output.indexOf(".min.") > -1;
  32. // Webpack Config.
  33. var wpConfig = require(settings.build.webpack);
  34. wpConfig.entry = { };
  35. wpConfig.output.filename = isMinOutputName ? '[name].js' : '[name].min.js';
  36. for (let library of settings.libraries) {
  37. let name = library.output.replace(isMinOutputName ? ".js" : ".min.js", "");
  38. wpConfig.entry[name] = path.resolve(wpConfig.context, library.entry);
  39. }
  40. // Generate minified file.
  41. let wpBuildMin = webpackStream(wpConfig, webpack);
  42. let buildEventMin = wpBuildMin.pipe(gulp.dest(outputDirectory));
  43. sequence.push(buildEventMin);
  44. // Generate unminified file.
  45. wpConfig.mode = "development";
  46. // Allow babylon.max.js and babylon.js
  47. wpConfig.output.filename = isMinOutputName ? '[name].max.js' : '[name].js';
  48. //wpConfig.output.filename = library.maxOutput || wpConfig.output.filename.replace(".min", "");
  49. let wpBuildMax = webpackStream(wpConfig, webpack);
  50. let buildEventMax = wpBuildMax.pipe(gulp.dest(outputDirectory));
  51. sequence.push(buildEventMax);
  52. return merge2(sequence)
  53. .on("end", function() {
  54. // TODO. Generate all d.ts
  55. let library = libraries[0];
  56. if (!library.preventLoadLibrary) {
  57. let fileLocation = path.join(outputDirectory, settings.build.processDeclaration.filename);
  58. // Generate DTS the Dts Bundle way...
  59. // dtsBundle.bundle(settings.build.dtsBundle);
  60. let srcDirectory = settings.build.srcDirectory;
  61. let depthCount = srcDirectory.match(/\//g).length - srcDirectory.match(/\.\.\//g).length;
  62. let tempDirectory = "";
  63. for (let i = 0; i < depthCount; i++) {
  64. tempDirectory += "../"
  65. }
  66. tempDirectory += ".temp/";
  67. // Generate DTS the old way...
  68. cp.execSync('tsc --module amd --outFile "' + tempDirectory + 'amd.js" --emitDeclarationOnly true', {
  69. cwd: settings.build.srcDirectory
  70. });
  71. // Convert the tsc AMD BUNDLED declaration to our expected one
  72. processAmdDeclarationToModule("../../.temp/amd.d.ts", {
  73. output: fileLocation,
  74. moduleName: settings.build.processDeclaration.packageName,
  75. entryPoint: library.entry
  76. });
  77. // Convert Module to Namespace for globals
  78. processModuleDeclarationToNamespace(fileLocation, settings.build.processDeclaration);
  79. }
  80. cb();
  81. });
  82. }
  83. /**
  84. * Dynamic module creation In Serie for WebPack leaks.
  85. */
  86. function buildExternalLibraries(settings) {
  87. // Clean up old build files.
  88. rmDir(settings.build.dtsBundle.baseDir);
  89. // Creates the required tasks.
  90. var tasks = [];
  91. var shaders = function() { return buildShaders(settings); };
  92. var build = function(cb) { return buildExternalLibrariesMultiEntry(settings.libraries, settings, cb) };
  93. tasks.push(shaders, build);
  94. return gulp.series.apply(this, tasks);
  95. }
  96. /**
  97. * Dynamic module creation.
  98. */
  99. config.modules.map(function(module) {
  100. const settings = config[module];
  101. gulp.task(module, buildExternalLibraries(settings));
  102. });