RequireEnsurePlugin.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const RequireEnsureDependency = require("./RequireEnsureDependency");
  7. const RequireEnsureItemDependency = require("./RequireEnsureItemDependency");
  8. const RequireEnsureDependenciesBlockParserPlugin = require("./RequireEnsureDependenciesBlockParserPlugin");
  9. const {
  10. JAVASCRIPT_MODULE_TYPE_AUTO,
  11. JAVASCRIPT_MODULE_TYPE_DYNAMIC
  12. } = require("../ModuleTypeConstants");
  13. const {
  14. evaluateToString,
  15. toConstantDependency
  16. } = require("../javascript/JavascriptParserHelpers");
  17. const PLUGIN_NAME = "RequireEnsurePlugin";
  18. class RequireEnsurePlugin {
  19. apply(compiler) {
  20. compiler.hooks.compilation.tap(
  21. PLUGIN_NAME,
  22. (compilation, { normalModuleFactory }) => {
  23. compilation.dependencyFactories.set(
  24. RequireEnsureItemDependency,
  25. normalModuleFactory
  26. );
  27. compilation.dependencyTemplates.set(
  28. RequireEnsureItemDependency,
  29. new RequireEnsureItemDependency.Template()
  30. );
  31. compilation.dependencyTemplates.set(
  32. RequireEnsureDependency,
  33. new RequireEnsureDependency.Template()
  34. );
  35. const handler = (parser, parserOptions) => {
  36. if (
  37. parserOptions.requireEnsure !== undefined &&
  38. !parserOptions.requireEnsure
  39. )
  40. return;
  41. new RequireEnsureDependenciesBlockParserPlugin().apply(parser);
  42. parser.hooks.evaluateTypeof
  43. .for("require.ensure")
  44. .tap(PLUGIN_NAME, evaluateToString("function"));
  45. parser.hooks.typeof
  46. .for("require.ensure")
  47. .tap(
  48. PLUGIN_NAME,
  49. toConstantDependency(parser, JSON.stringify("function"))
  50. );
  51. };
  52. normalModuleFactory.hooks.parser
  53. .for(JAVASCRIPT_MODULE_TYPE_AUTO)
  54. .tap(PLUGIN_NAME, handler);
  55. normalModuleFactory.hooks.parser
  56. .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
  57. .tap(PLUGIN_NAME, handler);
  58. }
  59. );
  60. }
  61. }
  62. module.exports = RequireEnsurePlugin;