1
0

rollup.config.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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.WebGPU.js',
  57. plugins: [
  58. header()
  59. ],
  60. output: [
  61. {
  62. format: 'esm',
  63. file: 'build/three.webgpu.js'
  64. }
  65. ]
  66. },
  67. {
  68. input: 'src/Three.WebGPU.Nodes.js',
  69. plugins: [
  70. header()
  71. ],
  72. output: [
  73. {
  74. format: 'esm',
  75. file: 'build/three.webgpu.nodes.js'
  76. }
  77. ]
  78. },
  79. {
  80. input: 'src/Three.js',
  81. plugins: [
  82. glsl(),
  83. header(),
  84. terser()
  85. ],
  86. output: [
  87. {
  88. format: 'esm',
  89. file: 'build/three.module.min.js'
  90. }
  91. ]
  92. },
  93. {
  94. input: 'src/Three.WebGPU.js',
  95. plugins: [
  96. header(),
  97. terser()
  98. ],
  99. output: [
  100. {
  101. format: 'esm',
  102. file: 'build/three.webgpu.min.js'
  103. }
  104. ]
  105. },
  106. {
  107. input: 'src/Three.WebGPU.Nodes.js',
  108. plugins: [
  109. header(),
  110. terser()
  111. ],
  112. output: [
  113. {
  114. format: 'esm',
  115. file: 'build/three.webgpu.nodes.min.js'
  116. }
  117. ]
  118. },
  119. {
  120. input: 'src/Three.js',
  121. plugins: [
  122. glsl(),
  123. header()
  124. ],
  125. output: [
  126. {
  127. format: 'cjs',
  128. name: 'THREE',
  129. file: 'build/three.cjs',
  130. indent: '\t'
  131. }
  132. ]
  133. }
  134. ];
  135. export default ( args ) => args.configOnlyModule ? builds.slice( 0, 3 ) : builds;
粤ICP备19079148号