提交学习笔记专用
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

173 lines
5.4 KiB

  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const util = require("util");
  7. const memoize = require("./util/memoize");
  8. /** @typedef {import("tapable").Tap} Tap */
  9. /** @typedef {import("webpack-sources").Source} Source */
  10. /** @typedef {import("./Chunk")} Chunk */
  11. /** @typedef {import("./Compilation")} Compilation */
  12. /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
  13. /** @typedef {import("./Module")} Module */
  14. /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
  15. /** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */
  16. /** @typedef {import("./javascript/JavascriptModulesPlugin").ModuleRenderContext} ModuleRenderContext */
  17. /** @typedef {import("./util/Hash")} Hash */
  18. /**
  19. * @template T
  20. * @typedef {import("tapable").IfSet<T>} IfSet
  21. */
  22. const getJavascriptModulesPlugin = memoize(() =>
  23. require("./javascript/JavascriptModulesPlugin")
  24. );
  25. // TODO webpack 6: remove this class
  26. class ModuleTemplate {
  27. /**
  28. * @param {RuntimeTemplate} runtimeTemplate the runtime template
  29. * @param {Compilation} compilation the compilation
  30. */
  31. constructor(runtimeTemplate, compilation) {
  32. this._runtimeTemplate = runtimeTemplate;
  33. this.type = "javascript";
  34. this.hooks = Object.freeze({
  35. content: {
  36. tap: util.deprecate(
  37. /**
  38. * @template AdditionalOptions
  39. * @param {string | Tap & IfSet<AdditionalOptions>} options options
  40. * @param {(source: Source, module: Module, moduleRenderContext: ModuleRenderContext, dependencyTemplates: DependencyTemplates) => Source} fn fn
  41. */
  42. (options, fn) => {
  43. getJavascriptModulesPlugin()
  44. .getCompilationHooks(compilation)
  45. .renderModuleContent.tap(
  46. options,
  47. (source, module, renderContext) =>
  48. fn(
  49. source,
  50. module,
  51. renderContext,
  52. renderContext.dependencyTemplates
  53. )
  54. );
  55. },
  56. "ModuleTemplate.hooks.content is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModuleContent instead)",
  57. "DEP_MODULE_TEMPLATE_CONTENT"
  58. )
  59. },
  60. module: {
  61. tap: util.deprecate(
  62. /**
  63. * @template AdditionalOptions
  64. * @param {string | Tap & IfSet<AdditionalOptions>} options options
  65. * @param {(source: Source, module: Module, moduleRenderContext: ModuleRenderContext, dependencyTemplates: DependencyTemplates) => Source} fn fn
  66. */
  67. (options, fn) => {
  68. getJavascriptModulesPlugin()
  69. .getCompilationHooks(compilation)
  70. .renderModuleContent.tap(
  71. options,
  72. (source, module, renderContext) =>
  73. fn(
  74. source,
  75. module,
  76. renderContext,
  77. renderContext.dependencyTemplates
  78. )
  79. );
  80. },
  81. "ModuleTemplate.hooks.module is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModuleContent instead)",
  82. "DEP_MODULE_TEMPLATE_MODULE"
  83. )
  84. },
  85. render: {
  86. tap: util.deprecate(
  87. /**
  88. * @template AdditionalOptions
  89. * @param {string | Tap & IfSet<AdditionalOptions>} options options
  90. * @param {(source: Source, module: Module, chunkRenderContext: ChunkRenderContext, dependencyTemplates: DependencyTemplates) => Source} fn fn
  91. */
  92. (options, fn) => {
  93. getJavascriptModulesPlugin()
  94. .getCompilationHooks(compilation)
  95. .renderModuleContainer.tap(
  96. options,
  97. (source, module, renderContext) =>
  98. fn(
  99. source,
  100. module,
  101. renderContext,
  102. renderContext.dependencyTemplates
  103. )
  104. );
  105. },
  106. "ModuleTemplate.hooks.render is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModuleContainer instead)",
  107. "DEP_MODULE_TEMPLATE_RENDER"
  108. )
  109. },
  110. package: {
  111. tap: util.deprecate(
  112. /**
  113. * @template AdditionalOptions
  114. * @param {string | Tap & IfSet<AdditionalOptions>} options options
  115. * @param {(source: Source, module: Module, chunkRenderContext: ChunkRenderContext, dependencyTemplates: DependencyTemplates) => Source} fn fn
  116. */
  117. (options, fn) => {
  118. getJavascriptModulesPlugin()
  119. .getCompilationHooks(compilation)
  120. .renderModulePackage.tap(
  121. options,
  122. (source, module, renderContext) =>
  123. fn(
  124. source,
  125. module,
  126. renderContext,
  127. renderContext.dependencyTemplates
  128. )
  129. );
  130. },
  131. "ModuleTemplate.hooks.package is deprecated (use JavascriptModulesPlugin.getCompilationHooks().renderModulePackage instead)",
  132. "DEP_MODULE_TEMPLATE_PACKAGE"
  133. )
  134. },
  135. hash: {
  136. tap: util.deprecate(
  137. /**
  138. * @template AdditionalOptions
  139. * @param {string | Tap & IfSet<AdditionalOptions>} options options
  140. * @param {(hash: Hash) => void} fn fn
  141. */
  142. (options, fn) => {
  143. compilation.hooks.fullHash.tap(options, fn);
  144. },
  145. "ModuleTemplate.hooks.hash is deprecated (use Compilation.hooks.fullHash instead)",
  146. "DEP_MODULE_TEMPLATE_HASH"
  147. )
  148. }
  149. });
  150. }
  151. }
  152. Object.defineProperty(ModuleTemplate.prototype, "runtimeTemplate", {
  153. get: util.deprecate(
  154. /**
  155. * @this {ModuleTemplate}
  156. * @returns {RuntimeTemplate} output options
  157. */
  158. function runtimeTemplate() {
  159. return this._runtimeTemplate;
  160. },
  161. "ModuleTemplate.runtimeTemplate is deprecated (use Compilation.runtimeTemplate instead)",
  162. "DEP_WEBPACK_CHUNK_TEMPLATE_OUTPUT_OPTIONS"
  163. )
  164. });
  165. module.exports = ModuleTemplate;