gulpfile.js 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. var gulp = require("gulp");
  2. var typescript = require("gulp-typescript");
  3. var srcToVariable = require("./gulp-srcToVariable");
  4. var merge2 = require("merge2");
  5. var concat = require("gulp-concat");
  6. var rename = require("gulp-rename");
  7. var cleants = require('gulp-clean-ts-extends');
  8. var replace = require("gulp-replace");
  9. var webserver = require('gulp-webserver');
  10. var uglify = require("gulp-uglify");
  11. var uncommentShader = require("./gulp-removeShaderComments");
  12. var config = require("./config.json");
  13. var extendsSearchRegex = /var\s__extends[\s\S]+?\};/g;
  14. //function to convert the shaders' filenames to variable names.
  15. function shadersName(filename) {
  16. return filename.replace('.fragment', 'Pixel')
  17. .replace('.vertex', 'Vertex')
  18. .replace('.fx', 'Shader');
  19. }
  20. function includeShadersName(filename) {
  21. return filename.replace('.fx', '');
  22. }
  23. gulp.task('copyReference', function () {
  24. return gulp.src("../dist/preview release/babylon.max.js").pipe(gulp.dest("test/refs"));
  25. });
  26. /*
  27. Compiles all typescript files and creating a declaration file.
  28. */
  29. gulp.task('default', ["copyReference"], function () {
  30. var tasks = config.materials.map(function (material) {
  31. var compilOutput = gulp.src(material.file)
  32. .pipe(typescript({
  33. noExternalResolve: false,
  34. target: 'ES5',
  35. declarationFiles: true,
  36. typescript: require('typescript'),
  37. experimentalDecorators: true
  38. }));
  39. var js = compilOutput.js;
  40. var dts = [];
  41. if (material.declarationFilename) {
  42. // Build definitions file
  43. dts = compilOutput.dts
  44. .pipe(concat(material.declarationFilename))
  45. .pipe(gulp.dest(config.build.dtsOutputDirectory));
  46. }
  47. else {
  48. // Build definitions file
  49. dts = compilOutput.dts
  50. .pipe(gulp.dest(config.build.dtsOutputDirectory));
  51. }
  52. var shader = gulp.src(material.shaderFiles)
  53. .pipe(uncommentShader())
  54. .pipe(srcToVariable("BABYLON.Effect.ShadersStore", true, shadersName));
  55. if (!material.referenceFiles) {
  56. material.referenceFiles = [];
  57. }
  58. var includeShader = gulp.src(material.referenceFiles)
  59. .pipe(uncommentShader())
  60. .pipe(srcToVariable("BABYLON.Effect.IncludesShadersStore", true, includeShadersName));
  61. return merge2(js, shader, includeShader)
  62. .pipe(cleants())
  63. .pipe(replace(extendsSearchRegex, ""))
  64. .pipe(concat(material.output))
  65. .pipe(gulp.dest(config.build.distOutputDirectory))
  66. .pipe(rename({extname: ".min.js"}))
  67. .pipe(uglify())
  68. .pipe(gulp.dest(config.build.distOutputDirectory));
  69. });
  70. return tasks;
  71. });
  72. /**
  73. * Web server task to serve a local test page
  74. */
  75. gulp.task('webserver', function() {
  76. gulp.src('.')
  77. .pipe(webserver({
  78. livereload: false,
  79. open: 'http://localhost:1338/test/index.html',
  80. port: 1338,
  81. fallback: 'index.html'
  82. }));
  83. });