2
0

rollup.config.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import terser from '@rollup/plugin-terser';
  2. import MagicString from 'magic-string';
  3. export function glsl() {
  4. return {
  5. transform( code, id ) {
  6. if ( /\.glsl.js$/.test( id ) === false ) return;
  7. code = new MagicString( code );
  8. code.replace( /\/\* glsl \*\/\`(.*?)\`/sg, function ( match, p1 ) {
  9. return JSON.stringify(
  10. p1
  11. .trim()
  12. .replace( /\r/g, '' )
  13. .replace( /[ \t]*\/\/.*\n/g, '' ) // remove //
  14. .replace( /[ \t]*\/\*[\s\S]*?\*\//g, '' ) // remove /* */
  15. .replace( /\n{2,}/g, '\n' ) // # \n+ to \n
  16. );
  17. } );
  18. return {
  19. code: code.toString(),
  20. map: code.generateMap()
  21. };
  22. }
  23. };
  24. }
  25. function header() {
  26. return {
  27. renderChunk( code ) {
  28. code = new MagicString( code );
  29. code.prepend( `/**
  30. * @license
  31. * Copyright 2010-2024 Three.js Authors
  32. * SPDX-License-Identifier: MIT
  33. */\n` );
  34. return {
  35. code: code.toString(),
  36. map: code.generateMap()
  37. };
  38. }
  39. };
  40. }
  41. const builds = [
  42. {
  43. input: 'src/Three.js',
  44. plugins: [
  45. glsl(),
  46. header()
  47. ],
  48. output: [
  49. {
  50. format: 'esm',
  51. file: 'build/three.module.js'
  52. }
  53. ]
  54. },
  55. {
  56. input: 'src/Three.js',
  57. plugins: [
  58. glsl(),
  59. header(),
  60. terser()
  61. ],
  62. output: [
  63. {
  64. format: 'esm',
  65. file: 'build/three.module.min.js'
  66. }
  67. ]
  68. },
  69. {
  70. input: 'src/Three.js',
  71. plugins: [
  72. glsl(),
  73. header()
  74. ],
  75. output: [
  76. {
  77. format: 'cjs',
  78. name: 'THREE',
  79. file: 'build/three.cjs',
  80. indent: '\t'
  81. }
  82. ]
  83. },
  84. {
  85. input: 'src/Three.WebGPU.js',
  86. plugins: [
  87. header()
  88. ],
  89. output: [
  90. {
  91. format: 'esm',
  92. file: 'build/three.webgpu.js'
  93. }
  94. ]
  95. },
  96. {
  97. input: 'src/Three.WebGPU.js',
  98. plugins: [
  99. header(),
  100. terser()
  101. ],
  102. output: [
  103. {
  104. format: 'esm',
  105. file: 'build/three.webgpu.min.js'
  106. }
  107. ]
  108. }
  109. ];
  110. export default ( args ) => args.configOnlyModule ? [ builds[ 0 ], builds[ 3 ] ] : builds;