rollup.config.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. import terser from '@rollup/plugin-terser';
  2. import MagicString from 'magic-string';
  3. function addons() {
  4. return {
  5. transform( code, id ) {
  6. if ( /\/examples\/jsm\//.test( id ) === false ) return;
  7. code = new MagicString( code );
  8. code.replace( 'build/three.module.js', 'src/Three.js' );
  9. return {
  10. code: code.toString(),
  11. map: code.generateMap().toString()
  12. };
  13. }
  14. };
  15. }
  16. export function glsl() {
  17. return {
  18. transform( code, id ) {
  19. if ( /\.glsl.js$/.test( id ) === false ) return;
  20. code = new MagicString( code );
  21. code.replace( /\/\* glsl \*\/\`(.*?)\`/sg, function ( match, p1 ) {
  22. return JSON.stringify(
  23. p1
  24. .trim()
  25. .replace( /\r/g, '' )
  26. .replace( /[ \t]*\/\/.*\n/g, '' ) // remove //
  27. .replace( /[ \t]*\/\*[\s\S]*?\*\//g, '' ) // remove /* */
  28. .replace( /\n{2,}/g, '\n' ) // # \n+ to \n
  29. );
  30. } );
  31. return {
  32. code: code.toString(),
  33. map: code.generateMap().toString()
  34. };
  35. }
  36. };
  37. }
  38. function header() {
  39. return {
  40. renderChunk( code ) {
  41. code = new MagicString( code );
  42. code.prepend( `/**
  43. * @license
  44. * Copyright 2010-2023 Three.js Authors
  45. * SPDX-License-Identifier: MIT
  46. */\n` );
  47. return {
  48. code: code.toString(),
  49. map: code.generateMap().toString()
  50. };
  51. }
  52. };
  53. }
  54. function deprecationWarning() {
  55. return {
  56. renderChunk( code ) {
  57. code = new MagicString( code );
  58. code.prepend( `console.warn( 'Scripts "build/three.js" and "build/three.min.js" are deprecated with r150+, and will be removed with r160. Please use ES Modules or alternatives: https://threejs.org/docs/index.html#manual/en/introduction/Installation' );\n` );
  59. return {
  60. code: code.toString(),
  61. map: code.generateMap().toString()
  62. };
  63. }
  64. };
  65. }
  66. const builds = [
  67. {
  68. input: 'src/Three.js',
  69. plugins: [
  70. addons(),
  71. glsl(),
  72. header()
  73. ],
  74. output: [
  75. {
  76. format: 'esm',
  77. file: 'build/three.module.js'
  78. }
  79. ]
  80. },
  81. {
  82. input: 'src/Three.js',
  83. plugins: [
  84. addons(),
  85. glsl(),
  86. terser(),
  87. header()
  88. ],
  89. output: [
  90. {
  91. format: 'esm',
  92. file: 'build/three.module.min.js'
  93. }
  94. ]
  95. },
  96. {
  97. input: 'src/Three.js',
  98. plugins: [
  99. addons(),
  100. glsl(),
  101. header()
  102. ],
  103. output: [
  104. {
  105. format: 'cjs',
  106. name: 'THREE',
  107. file: 'build/three.cjs',
  108. indent: '\t'
  109. }
  110. ]
  111. },
  112. { // @deprecated, r150
  113. input: 'src/Three.js',
  114. plugins: [
  115. addons(),
  116. glsl(),
  117. header(),
  118. deprecationWarning()
  119. ],
  120. output: [
  121. {
  122. format: 'umd',
  123. name: 'THREE',
  124. file: 'build/three.js',
  125. indent: '\t'
  126. }
  127. ]
  128. },
  129. { // @deprecated, r150
  130. input: 'src/Three.js',
  131. plugins: [
  132. addons(),
  133. glsl(),
  134. terser(),
  135. header(),
  136. deprecationWarning()
  137. ],
  138. output: [
  139. {
  140. format: 'umd',
  141. name: 'THREE',
  142. file: 'build/three.min.js'
  143. }
  144. ]
  145. }
  146. ];
  147. export default ( args ) => args.configOnlyModule ? builds[ 0 ] : builds;