gulpfile.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. var gulp = require('gulp'),
  2. uglify = require('gulp-uglify'),
  3. rename = require('gulp-rename'),
  4. concat = require('gulp-concat'),
  5. clean = require('gulp-clean'),
  6. typescript = require('gulp-typescript'),
  7. sourcemaps = require('gulp-sourcemaps'),
  8. shaders = require('./gulp-shaders'),
  9. gulpFilter = require('gulp-filter');
  10. /**
  11. * Concat all fx files into one js file.
  12. */
  13. gulp.task('shaders', function() {
  14. return gulp.src(['../../Babylon/Shaders/*.fx'])
  15. .pipe(shaders('shaders.js'))
  16. .pipe(gulp.dest('build/'))
  17. });
  18. /**
  19. * Compile typescript files to their js respective files
  20. */
  21. gulp.task('typescript-to-js', function() {
  22. //Compile all ts file into their respective js file.
  23. var tsResult = gulp.src(['../../Babylon/**/*.ts','../../References/**/*.d.ts'])
  24. .pipe(sourcemaps.init()) // This means sourcemaps will be generated
  25. .pipe(typescript({ noExternalResolve: true, target: 'ES5'}));
  26. return tsResult.js
  27. .pipe(sourcemaps.write('.')) // Now the sourcemaps are added to the .js file
  28. .pipe(gulp.dest('../../Babylon/'));
  29. });
  30. /**
  31. * Compile the declaration file babylon.d.ts
  32. */
  33. gulp.task('typescript-declaration', ['typescript-to-js'], function() {
  34. var tsResult = gulp.src(['../../Babylon/**/*.ts','../../References/**/*.d.ts'])
  35. .pipe(typescript({
  36. declarationFiles: true,
  37. noExternalResolve: true,
  38. target: 'ES5'
  39. }));
  40. return tsResult.dts.pipe(concat('babylon.d.ts'))
  41. .pipe(gulp.dest('build/'));
  42. });
  43. /**
  44. * Concat all js files in order into one big js file and minify it.
  45. * The list is based on https://github.com/BabylonJS/Babylon.js/wiki/Creating-the-minified-version
  46. * Do not hesitate to update it if you need to add your own files.
  47. */
  48. gulp.task('scripts', ['shaders'] ,function() {
  49. return gulp.src([
  50. '../../Babylon/Math/babylon.math.js',
  51. '../../Babylon/Tools/babylon.database.js',
  52. '../../Babylon/Tools/babylon.tools.tga.js',
  53. '../../Babylon/Tools/babylon.tools.dds.js',
  54. '../../Babylon/Tools/babylon.smartArray.js',
  55. '../../Babylon/Tools/babylon.tools.js',
  56. '../../Babylon/babylon.engine.js',
  57. '../../Babylon/babylon.node.js',
  58. '../../Babylon/Tools/babylon.filesInput.js',
  59. '../../Babylon/Collisions/babylon.pickingInfo.js',
  60. '../../Babylon/Culling/babylon.boundingSphere.js',
  61. '../../Babylon/Culling/babylon.boundingBox.js',
  62. '../../Babylon/Culling/babylon.boundingInfo.js',
  63. '../../Babylon/Mesh/babylon.abstractMesh.js',
  64. '../../Babylon/Lights/babylon.light.js',
  65. '../../Babylon/Lights/babylon.pointLight.js',
  66. '../../Babylon/Lights/babylon.spotLight.js',
  67. '../../Babylon/Lights/babylon.hemisphericLight.js',
  68. '../../Babylon/Lights/babylon.directionalLight.js',
  69. '../../Babylon/Lights/Shadows/babylon.shadowGenerator.js',
  70. '../../Babylon/Collisions/babylon.collider.js',
  71. '../../Babylon/Cameras/babylon.camera.js',
  72. '../../Babylon/Cameras/babylon.targetCamera.js',
  73. '../../Babylon/Cameras/babylon.freeCamera.js',
  74. '../../Babylon/Cameras/babylon.followCamera.js',
  75. '../../Babylon/Cameras/babylon.touchCamera.js',
  76. '../../Babylon/Cameras/babylon.arcRotateCamera.js',
  77. '../../Babylon/Cameras/babylon.deviceOrientationCamera.js',
  78. '../../Babylon/Rendering/babylon.renderingManager.js',
  79. '../../Babylon/Rendering/babylon.renderingGroup.js',
  80. '../../Babylon/babylon.scene.js',
  81. '../../Babylon/Mesh/babylon.vertexBuffer.js',
  82. '../../Babylon/Mesh/babylon.InstancedMesh.js',
  83. '../../Babylon/Mesh/babylon.mesh.js',
  84. '../../Babylon/Mesh/babylon.subMesh.js',
  85. '../../Babylon/Materials/Textures/babylon.baseTexture.js',
  86. '../../Babylon/Materials/Textures/babylon.texture.js',
  87. '../../Babylon/Materials/Textures/babylon.cubeTexture.js',
  88. '../../Babylon/Materials/Textures/babylon.renderTargetTexture.js',
  89. '../../Babylon/Materials/Textures/Procedurals/babylon.proceduralTexture.js',
  90. '../../Babylon/Materials/Textures/babylon.mirrorTexture.js',
  91. '../../Babylon/Materials/Textures/babylon.dynamicTexture.js',
  92. '../../Babylon/Materials/Textures/babylon.videoTexture.js',
  93. '../../Babylon/Materials/Textures/Procedurals/babylon.customProceduralTexture.js',
  94. '../../Babylon/Materials/Textures/babylon.proceduralTexture.js',
  95. '../../Babylon/Materials/Textures/Procedurals/babylon.standardProceduralTexture.js',
  96. '../../Babylon/Materials/babylon.effect.js',
  97. 'build/shaders.js',
  98. '../../Babylon/Materials/babylon.material.js',
  99. '../../Babylon/Materials/babylon.standardMaterial.js',
  100. '../../Babylon/Materials/babylon.multiMaterial.js',
  101. '../../Babylon/Loading/babylon.sceneLoader.js',
  102. '../../Babylon/Loading/Plugins/babylon.babylonFileLoader.js',
  103. '../../Babylon/Sprites/babylon.spriteManager.js',
  104. '../../Babylon/Sprites/babylon.sprite.js',
  105. '../../Babylon/Layer/babylon.layer.js',
  106. '../../Babylon/Particles/babylon.particle.js',
  107. '../../Babylon/Particles/babylon.particleSystem.js',
  108. '../../Babylon/Animations/babylon.animation.js',
  109. '../../Babylon/Animations/babylon.animatable.js',
  110. '../../Babylon/Animations/babylon.easing.js',
  111. '../../Babylon/Culling/Octrees/babylon.octree.js',
  112. '../../Babylon/Culling/Octrees/babylon.octreeBlock.js',
  113. '../../Babylon/Bones/babylon.bone.js',
  114. '../../Babylon/Bones/babylon.skeleton.js',
  115. '../../Babylon/Bones/babylon.skeleton.js',
  116. '../../Babylon/PostProcess/babylon.postProcess.js',
  117. '../../Babylon/PostProcess/babylon.postProcessManager.js',
  118. '../../Babylon/PostProcess/babylon.passPostProcess.js',
  119. '../../Babylon/PostProcess/babylon.blurPostProcess.js',
  120. '../../Babylon/PostProcess/babylon.refractionPostProcess.js',
  121. '../../Babylon/PostProcess/babylon.blackAndWhitePostProcess.js',
  122. '../../Babylon/PostProcess/babylon.convolutionPostProcess.js',
  123. '../../Babylon/PostProcess/babylon.filterPostProcess.js',
  124. '../../Babylon/PostProcess/babylon.fxaaPostProcess.js',
  125. '../../Babylon/LensFlare/babylon.lensFlare.js',
  126. '../../Babylon/LensFlare/babylon.lensFlareSystem.js',
  127. '../../Babylon/Physics/Plugins/babylon.cannonJSPlugin.js',
  128. '../../Babylon/Physics/Plugins/babylon.oimoJSPlugin.js',
  129. '../../Babylon/Physics/babylon.physicsEngine.js',
  130. '../../Babylon/Tools/babylon.sceneSerializer.js',
  131. '../../Babylon/Mesh/babylon.csg.js',
  132. '../../Babylon/PostProcess/babylon.oculusDistortionCorrectionPostProcess.js',
  133. '../../Babylon/Tools/babylon.virtualJoystick.js',
  134. '../../Babylon/Cameras/VR/babylon.oculusCamera.js',
  135. '../../Babylon/Cameras/VR/babylon.oculusGamepadCamera.js',
  136. '../../Babylon/Cameras/babylon.virtualJoysticksCamera.js',
  137. '../../Babylon/Materials/babylon.shaderMaterial.js',
  138. '../../Babylon/Mesh/babylon.mesh.vertexData.js',
  139. '../../Babylon/Cameras/babylon.anaglyphCamera.js',
  140. '../../Babylon/PostProcess/babylon.anaglyphPostProcess.js',
  141. '../../Babylon/Tools/babylon.tags.js',
  142. '../../Babylon/Tools/babylon.andOrNotEvaluator.js',
  143. '../../Babylon/PostProcess/RenderPipeline/babylon.postProcessRenderPass.js',
  144. '../../Babylon/PostProcess/RenderPipeline/babylon.postProcessRenderEffect.js',
  145. '../../Babylon/PostProcess/RenderPipeline/babylon.postProcessRenderPipeline.js',
  146. '../../Babylon/PostProcess/RenderPipeline/babylon.postProcessRenderPipelineManager.js',
  147. '../../Babylon/PostProcess/babylon.displayPassPostProcess.js',
  148. '../../Babylon/Rendering/babylon.boundingBoxRenderer.js',
  149. '../../Babylon/Actions/babylon.condition.js',
  150. '../../Babylon/Actions/babylon.action.js',
  151. '../../Babylon/Actions/babylon.actionManager.js',
  152. '../../Babylon/Actions/babylon.interpolateValueAction.js',
  153. '../../Babylon/Actions/babylon.directActions.js',
  154. '../../Babylon/Mesh/babylon.geometry.js',
  155. '../../Babylon/Mesh/babylon.groundMesh.js',
  156. '../../Babylon/Mesh/babylon.instancedMesh.js',
  157. '../../Babylon/Tools/babylon.gamepads.js',
  158. '../../Babylon/Cameras/babylon.gamepadCamera.js',
  159. '../../Babylon/Mesh/babylon.linesMesh.js',
  160. '../../Babylon/Rendering/babylon.outlineRenderer.js',
  161. '../../Babylon/Tools/babylon.assetsManager.js',
  162. '../../Babylon/Cameras/VR/babylon.vrDeviceOrientationCamera.js',
  163. '../../Babylon/Cameras/VR/babylon.webVRCamera.js',
  164. '../../Babylon/Tools/babylon.sceneOptimizer.js',
  165. '../../Babylon/Mesh/babylon.meshLODLevel.js',
  166. '../../Babylon/Audio/babylon.audioengine.js',
  167. '../../Babylon/Audio/babylon.sound.js',
  168. '../../Babylon/Audio/babylon.soundtrack.js',
  169. '../../Babylon/Debug/babylon.debugLayer.js',
  170. '../../Babylon/Materials/Textures/babylon.rawTexture.js',
  171. '../../Babylon/Mesh/babylon.polygonMesh.js',
  172. '../../Babylon/Mesh/babylon.meshSimplification.js',
  173. '../../Babylon/Audio/babylon.analyser.js',
  174. '../../Babylon/Rendering/babylon.depthRenderer.js',
  175. '../../Babylon/PostProcess/babylon.ssaoRenderingPipeline.js',
  176. '../../Babylon/PostProcess/babylon.volumetricLightScatteringPostProcess.js'
  177. ])
  178. .pipe(concat('babylon.js'))
  179. .pipe(gulp.dest('build/'))
  180. .pipe(rename({suffix: '.min'}))
  181. //.pipe(uglify({ outSourceMap: true })) //waiting for https://github.com/gulpjs/gulp/issues/356
  182. .pipe(uglify())
  183. .pipe(gulp.dest('build/'))
  184. });
  185. /**
  186. * Clean temporary files
  187. * Called after the task scripts
  188. */
  189. gulp.task('clean', ['scripts'], function() {
  190. return gulp.src(['build/shaders.js'], {read: false})
  191. .pipe(clean());
  192. });
  193. /**
  194. * The default task, call the tasks: shaders, scripts, clean
  195. */
  196. gulp.task('default', function() {
  197. gulp.start('shaders','scripts', 'clean');
  198. });
  199. /**
  200. * The default typescript task, call the tasks: shaders, scripts, clean AFTER the task typescript-to-js
  201. */
  202. gulp.task('typescript', ['typescript-declaration'], function() {
  203. gulp.start('shaders','scripts', 'clean');
  204. });
  205. /**
  206. * Watch task, will call the default task if a js file is updated.
  207. */
  208. gulp.task('watch', function() {
  209. gulp.watch('src/**/*.js', ['default']);
  210. });
  211. /**
  212. * Watch typescript task, will call the default typescript task if a typescript file is updated.
  213. */
  214. gulp.task('watch-typescript', function() {
  215. gulp.watch('src/**/*.ts', ['typescript']);
  216. });