RequireIncludePlugin.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. /**
  13. * @import {
  14. * JavascriptParserOptions
  15. * } from "../../declarations/WebpackOptions"
  16. */
  17. /** @import Compiler from "../Compiler" */
  18. /** @import Parser from "../javascript/JavascriptParser" */
  19. const PLUGIN_NAME = "RequireIncludePlugin";
  20. class RequireIncludePlugin {
  21. /**
  22. * Applies the plugin by registering its hooks on the compiler.
  23. * @param {Compiler} compiler the compiler instance
  24. * @returns {void}
  25. */
  26. apply(compiler) {
  27. compiler.hooks.compilation.tap(
  28. PLUGIN_NAME,
  29. (compilation, { normalModuleFactory }) => {
  30. compilation.dependencyFactories.set(
  31. RequireIncludeDependency,
  32. normalModuleFactory
  33. );
  34. compilation.dependencyTemplates.set(
  35. RequireIncludeDependency,
  36. new RequireIncludeDependency.Template()
  37. );
  38. /**
  39. * Handles the hook callback for this code path.
  40. * @param {Parser} parser parser parser
  41. * @param {JavascriptParserOptions} parserOptions parserOptions
  42. * @returns {void}
  43. */
  44. const handler = (parser, parserOptions) => {
  45. if (parserOptions.requireInclude === false) return;
  46. const warn = parserOptions.requireInclude === undefined;
  47. new RequireIncludeDependencyParserPlugin(warn).apply(parser);
  48. };
  49. normalModuleFactory.hooks.parser
  50. .for(JAVASCRIPT_MODULE_TYPE_AUTO)
  51. .tap(PLUGIN_NAME, handler);
  52. normalModuleFactory.hooks.parser
  53. .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
  54. .tap(PLUGIN_NAME, handler);
  55. }
  56. );
  57. }
  58. }
  59. module.exports = RequireIncludePlugin;