gulpfile.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. const path = require('path');
  2. const gulp = require('gulp');
  3. const exec = require('child_process').exec;
  4. const fs = require("fs");
  5. const fsp = fs.promises;
  6. const concat = require('gulp-concat');
  7. const connect = require('gulp-connect');
  8. const {watch} = gulp;
  9. const {createExamplesPage} = require("./src/tools/create_potree_page");
  10. const {createGithubPage} = require("./src/tools/create_github_page");
  11. const {createIconsPage} = require("./src/tools/create_icons_page");
  12. const serveStatic = require('serve-static'); // 引入serve-static
  13. let paths = {
  14. laslaz: [
  15. "build/workers/laslaz-worker.js",
  16. "build/workers/lasdecoder-worker.js",
  17. ],
  18. html: [
  19. "src/viewer/potree.css",
  20. "src/viewer/sidebar1.html","src/viewer/sidebar2.html",
  21. "src/viewer/profile.html"
  22. ],
  23. resources: [
  24. "resources/**/*"
  25. ]
  26. };
  27. let workers = {
  28. "LASLAZWorker": [
  29. "libs/plasio/workers/laz-perf.js",
  30. "libs/plasio/workers/laz-loader-worker.js"
  31. ],
  32. "LASDecoderWorker": [
  33. "src/workers/LASDecoderWorker.js"
  34. ],
  35. "EptLaszipDecoderWorker": [
  36. "src/workers/EptLaszipDecoderWorker.js"
  37. ],
  38. "EptBinaryDecoderWorker": [
  39. "libs/ept/ParseBuffer.js",
  40. "src/workers/EptBinaryDecoderWorker.js"
  41. ],
  42. "EptZstandardDecoderWorker": [
  43. "src/workers/EptZstandardDecoder_preamble.js",
  44. 'libs/zstd-codec/bundle.js',
  45. "libs/ept/ParseBuffer.js",
  46. "src/workers/EptZstandardDecoderWorker.js"
  47. ]
  48. };
  49. // these libs are lazily loaded
  50. // in order for the lazy loader to find them, independent of the path of the html file,
  51. // we package them together with potree
  52. let lazyLibs = {
  53. "geopackage": "libs/geopackage",
  54. "sql.js": "libs/sql.js"
  55. };
  56. let shaders = [
  57. "src/materials/shaders/pointcloud_new.vs",
  58. "src/materials/shaders/pointcloud_new.fs",
  59. "src/materials/shaders/pointcloud_sm.vs",
  60. "src/materials/shaders/pointcloud_sm.fs",
  61. "src/materials/shaders/normalize.vs",
  62. "src/materials/shaders/normalize.fs",
  63. "src/materials/shaders/normalize_and_edl.fs",
  64. "src/materials/shaders/edl_new.vs",
  65. "src/materials/shaders/edl_new.fs",
  66. "src/materials/shaders/blur.vs",
  67. "src/materials/shaders/blur.fs",
  68. //add:
  69. "src/materials/shaders/depthBasic.vs",
  70. "src/materials/shaders/depthBasic.fs",
  71. "src/materials/shaders/copyCubeMap.vs",
  72. "src/materials/shaders/copyCubeMap.fs",
  73. "src/materials/shaders/basicTextured.vs",
  74. "src/materials/shaders/basicTextured.fs",
  75. "src/materials/shaders/skybox.vs",
  76. "src/materials/shaders/skybox.fs",
  77. ];
  78. 'src/**/*.js',
  79. // For development, it is now possible to use 'gulp webserver'
  80. // from the command line to start the server (default port is 8080)
  81. gulp.task('webserver', gulp.series(async function() {
  82. server = connect.server({
  83. port: 1234,
  84. host:'0.0.0.0',
  85. https: false,
  86. middleware: function(connect, opt) {
  87. return [
  88. // 首先,使用addResponseHeaders中间件来设置响应头
  89. function setCustomHeaders(req, res, next) {
  90. res.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
  91. res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp');
  92. next();
  93. },
  94. // 任何其他中间件,如serveStatic
  95. serveStatic('./public')
  96. ];
  97. }
  98. });
  99. }));
  100. gulp.task('examples_page', async function(done) {
  101. await Promise.all([
  102. createExamplesPage(),
  103. createGithubPage(),
  104. ]);
  105. done();
  106. });
  107. gulp.task('icons_viewer', async function(done) {
  108. await createIconsPage();
  109. done();
  110. });
  111. gulp.task('test', async function() {
  112. console.log("asdfiae8ofh");
  113. });
  114. gulp.task("workers", async function(done){
  115. for(let workerName of Object.keys(workers)){
  116. gulp.src(workers[workerName])
  117. .pipe(concat(`${workerName}.js`))
  118. .pipe(gulp.dest('build/potree/workers'));
  119. }
  120. done();
  121. });
  122. gulp.task("lazylibs", async function(done){
  123. for(let libname of Object.keys(lazyLibs)){
  124. const libpath = lazyLibs[libname];
  125. gulp.src([`${libpath}/**/*`])
  126. .pipe(gulp.dest(`build/potree/lazylibs/${libname}`));
  127. }
  128. done();
  129. });
  130. gulp.task("shaders", async function(){
  131. const components = [
  132. "let Shaders = {};"
  133. ];
  134. for(let file of shaders){
  135. const filename = path.basename(file);
  136. const content = await fsp.readFile(file);
  137. const prep = `Shaders["${filename}"] = \`${content}\``;
  138. components.push(prep);
  139. }
  140. components.push("export {Shaders};");
  141. const content = components.join("\n\n");
  142. const targetPath = `./build/shaders/shaders.js`;
  143. if(!fs.existsSync("build/shaders")){
  144. fs.mkdirSync("build/shaders");
  145. }
  146. fs.writeFileSync(targetPath, content, {flag: "w"});
  147. });
  148. gulp.task('build',
  149. gulp.series(
  150. gulp.parallel("workers", "lazylibs", "shaders", "icons_viewer", "examples_page"),
  151. async function(done){
  152. gulp.src(paths.html).pipe(gulp.dest('build/potree'));
  153. gulp.src(paths.resources).pipe(gulp.dest('build/potree/resources'));
  154. gulp.src(["LICENSE"]).pipe(gulp.dest('build/potree'));
  155. done();
  156. }
  157. )
  158. );
  159. gulp.task("pack", async function(){
  160. exec('rollup -c', function (err, stdout, stderr) {
  161. console.log(stdout);
  162. console.log(stderr);
  163. });
  164. });
  165. gulp.task('watch', gulp.parallel("build", "pack", "webserver", async function() {
  166. let watchlist = [
  167. 'src/**/*.js',
  168. 'src/**/**/*.js',
  169. 'src/**/*.css',
  170. 'src/**/*.html',
  171. 'src/**/*.vs',
  172. 'src/**/*.fs',
  173. 'resources/**/*',
  174. 'examples//**/*.json',
  175. '!resources/icons/index.html',
  176. ];
  177. watch(watchlist, gulp.series("build", "pack"));
  178. }));