RequireIncludePlugin.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const {
  7. JAVASCRIPT_MODULE_TYPE_AUTO,
  8. JAVASCRIPT_MODULE_TYPE_DYNAMIC
  9. } = require("../ModuleTypeConstants");
  10. const RequireIncludeDependency = require("./RequireIncludeDependency");
  11. const RequireIncludeDependencyParserPlugin = require("./RequireIncludeDependencyParserPlugin");
  12. /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
  13. /** @typedef {import("../Compiler")} Compiler */
  14. /** @typedef {import("../javascript/JavascriptParser")} Parser */
  15. const PLUGIN_NAME = "RequireIncludePlugin";
  16. class RequireIncludePlugin {
  17. /**
  18. * Applies the plugin by registering its hooks on the compiler.
  19. * @param {Compiler} compiler the compiler instance
  20. * @returns {void}
  21. */
  22. apply(compiler) {
  23. compiler.hooks.compilation.tap(
  24. PLUGIN_NAME,
  25. (compilation, { normalModuleFactory }) => {
  26. compilation.dependencyFactories.set(
  27. RequireIncludeDependency,
  28. normalModuleFactory
  29. );
  30. compilation.dependencyTemplates.set(
  31. RequireIncludeDependency,
  32. new RequireIncludeDependency.Template()
  33. );
  34. /**
  35. * Handles the hook callback for this code path.
  36. * @param {Parser} parser parser parser
  37. * @param {JavascriptParserOptions} parserOptions parserOptions
  38. * @returns {void}
  39. */
  40. const handler = (parser, parserOptions) => {
  41. if (parserOptions.requireInclude === false) return;
  42. const warn = parserOptions.requireInclude === undefined;
  43. new RequireIncludeDependencyParserPlugin(warn).apply(parser);
  44. };
  45. normalModuleFactory.hooks.parser
  46. .for(JAVASCRIPT_MODULE_TYPE_AUTO)
  47. .tap(PLUGIN_NAME, handler);
  48. normalModuleFactory.hooks.parser
  49. .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
  50. .tap(PLUGIN_NAME, handler);
  51. }
  52. );
  53. }
  54. }
  55. module.exports = RequireIncludePlugin;