ImportPlugin.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. /** @typedef {import("../Compiler")} Compiler */
  17. const PLUGIN_NAME = "ImportPlugin";
  18. class ImportPlugin {
  19. /**
  20. * Apply the plugin
  21. * @param {Compiler} compiler the compiler instance
  22. * @returns {void}
  23. */
  24. apply(compiler) {
  25. compiler.hooks.compilation.tap(
  26. PLUGIN_NAME,
  27. (compilation, { contextModuleFactory, normalModuleFactory }) => {
  28. compilation.dependencyFactories.set(
  29. ImportDependency,
  30. normalModuleFactory
  31. );
  32. compilation.dependencyTemplates.set(
  33. ImportDependency,
  34. new ImportDependency.Template()
  35. );
  36. compilation.dependencyFactories.set(
  37. ImportEagerDependency,
  38. normalModuleFactory
  39. );
  40. compilation.dependencyTemplates.set(
  41. ImportEagerDependency,
  42. new ImportEagerDependency.Template()
  43. );
  44. compilation.dependencyFactories.set(
  45. ImportWeakDependency,
  46. normalModuleFactory
  47. );
  48. compilation.dependencyTemplates.set(
  49. ImportWeakDependency,
  50. new ImportWeakDependency.Template()
  51. );
  52. compilation.dependencyFactories.set(
  53. ImportContextDependency,
  54. contextModuleFactory
  55. );
  56. compilation.dependencyTemplates.set(
  57. ImportContextDependency,
  58. new ImportContextDependency.Template()
  59. );
  60. const handler = (parser, parserOptions) => {
  61. if (parserOptions.import !== undefined && !parserOptions.import)
  62. return;
  63. new ImportParserPlugin(parserOptions).apply(parser);
  64. };
  65. normalModuleFactory.hooks.parser
  66. .for(JAVASCRIPT_MODULE_TYPE_AUTO)
  67. .tap(PLUGIN_NAME, handler);
  68. normalModuleFactory.hooks.parser
  69. .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
  70. .tap(PLUGIN_NAME, handler);
  71. normalModuleFactory.hooks.parser
  72. .for(JAVASCRIPT_MODULE_TYPE_ESM)
  73. .tap(PLUGIN_NAME, handler);
  74. }
  75. );
  76. }
  77. }
  78. module.exports = ImportPlugin;