RequireJsStuffPlugin.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 RuntimeGlobals = require("./RuntimeGlobals");
  11. const ConstDependency = require("./dependencies/ConstDependency");
  12. const {
  13. toConstantDependency
  14. } = require("./javascript/JavascriptParserHelpers");
  15. /** @typedef {import("../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
  16. /** @typedef {import("./Compiler")} Compiler */
  17. /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
  18. const PLUGIN_NAME = "RequireJsStuffPlugin";
  19. module.exports = class RequireJsStuffPlugin {
  20. /**
  21. * Applies the plugin by registering its hooks on the compiler.
  22. * @param {Compiler} compiler the compiler instance
  23. * @returns {void}
  24. */
  25. apply(compiler) {
  26. compiler.hooks.compilation.tap(
  27. PLUGIN_NAME,
  28. (compilation, { normalModuleFactory }) => {
  29. compilation.dependencyTemplates.set(
  30. ConstDependency,
  31. new ConstDependency.Template()
  32. );
  33. /**
  34. * Handles the hook callback for this code path.
  35. * @param {JavascriptParser} parser the parser
  36. * @param {JavascriptParserOptions} parserOptions options
  37. * @returns {void}
  38. */
  39. const handler = (parser, parserOptions) => {
  40. if (
  41. parserOptions.requireJs === undefined ||
  42. !parserOptions.requireJs
  43. ) {
  44. return;
  45. }
  46. parser.hooks.call
  47. .for("require.config")
  48. .tap(PLUGIN_NAME, toConstantDependency(parser, "undefined"));
  49. parser.hooks.call
  50. .for("requirejs.config")
  51. .tap(PLUGIN_NAME, toConstantDependency(parser, "undefined"));
  52. parser.hooks.expression
  53. .for("require.version")
  54. .tap(
  55. PLUGIN_NAME,
  56. toConstantDependency(parser, JSON.stringify("0.0.0"))
  57. );
  58. parser.hooks.expression
  59. .for("requirejs.onError")
  60. .tap(
  61. PLUGIN_NAME,
  62. toConstantDependency(
  63. parser,
  64. RuntimeGlobals.uncaughtErrorHandler,
  65. [RuntimeGlobals.uncaughtErrorHandler]
  66. )
  67. );
  68. };
  69. normalModuleFactory.hooks.parser
  70. .for(JAVASCRIPT_MODULE_TYPE_AUTO)
  71. .tap(PLUGIN_NAME, handler);
  72. normalModuleFactory.hooks.parser
  73. .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
  74. .tap(PLUGIN_NAME, handler);
  75. }
  76. );
  77. }
  78. };