ImportPlugin.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. JAVASCRIPT_MODULE_TYPE_ESM
  10. } = require("../ModuleTypeConstants");
  11. const ImportContextDependency = require("./ImportContextDependency");
  12. const ImportDependency = require("./ImportDependency");
  13. const ImportEagerDependency = require("./ImportEagerDependency");
  14. const ImportParserPlugin = require("./ImportParserPlugin");
  15. const ImportWeakDependency = require("./ImportWeakDependency");
  16. /**
  17. * @import {
  18. * JavascriptParserOptions
  19. * } from "../../declarations/WebpackOptions"
  20. */
  21. /** @import Compiler from "../Compiler" */
  22. /** @import Parser from "../javascript/JavascriptParser" */
  23. const PLUGIN_NAME = "ImportPlugin";
  24. class ImportPlugin {
  25. /**
  26. * Applies the plugin by registering its hooks on the compiler.
  27. * @param {Compiler} compiler the compiler instance
  28. * @returns {void}
  29. */
  30. apply(compiler) {
  31. compiler.hooks.compilation.tap(
  32. PLUGIN_NAME,
  33. (compilation, { contextModuleFactory, normalModuleFactory }) => {
  34. compilation.dependencyFactories.set(
  35. ImportDependency,
  36. normalModuleFactory
  37. );
  38. compilation.dependencyTemplates.set(
  39. ImportDependency,
  40. new ImportDependency.Template()
  41. );
  42. compilation.dependencyFactories.set(
  43. ImportEagerDependency,
  44. normalModuleFactory
  45. );
  46. compilation.dependencyTemplates.set(
  47. ImportEagerDependency,
  48. new ImportEagerDependency.Template()
  49. );
  50. compilation.dependencyFactories.set(
  51. ImportWeakDependency,
  52. normalModuleFactory
  53. );
  54. compilation.dependencyTemplates.set(
  55. ImportWeakDependency,
  56. new ImportWeakDependency.Template()
  57. );
  58. compilation.dependencyFactories.set(
  59. ImportContextDependency,
  60. contextModuleFactory
  61. );
  62. compilation.dependencyTemplates.set(
  63. ImportContextDependency,
  64. new ImportContextDependency.Template()
  65. );
  66. /**
  67. * Handles the hook callback for this code path.
  68. * @param {Parser} parser parser parser
  69. * @param {JavascriptParserOptions} parserOptions parserOptions
  70. * @returns {void}
  71. */
  72. const handler = (parser, parserOptions) => {
  73. if (parserOptions.import !== undefined && !parserOptions.import) {
  74. return;
  75. }
  76. new ImportParserPlugin(parserOptions).apply(parser);
  77. };
  78. normalModuleFactory.hooks.parser
  79. .for(JAVASCRIPT_MODULE_TYPE_AUTO)
  80. .tap(PLUGIN_NAME, handler);
  81. normalModuleFactory.hooks.parser
  82. .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
  83. .tap(PLUGIN_NAME, handler);
  84. normalModuleFactory.hooks.parser
  85. .for(JAVASCRIPT_MODULE_TYPE_ESM)
  86. .tap(PLUGIN_NAME, handler);
  87. }
  88. );
  89. }
  90. }
  91. module.exports = ImportPlugin;