RequireJsStuffPlugin.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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("./Compiler")} Compiler */
  16. const PLUGIN_NAME = "RequireJsStuffPlugin";
  17. module.exports = class RequireJsStuffPlugin {
  18. /**
  19. * Apply the plugin
  20. * @param {Compiler} compiler the compiler instance
  21. * @returns {void}
  22. */
  23. apply(compiler) {
  24. compiler.hooks.compilation.tap(
  25. PLUGIN_NAME,
  26. (compilation, { normalModuleFactory }) => {
  27. compilation.dependencyTemplates.set(
  28. ConstDependency,
  29. new ConstDependency.Template()
  30. );
  31. const handler = (parser, parserOptions) => {
  32. if (
  33. parserOptions.requireJs === undefined ||
  34. !parserOptions.requireJs
  35. ) {
  36. return;
  37. }
  38. parser.hooks.call
  39. .for("require.config")
  40. .tap(PLUGIN_NAME, toConstantDependency(parser, "undefined"));
  41. parser.hooks.call
  42. .for("requirejs.config")
  43. .tap(PLUGIN_NAME, toConstantDependency(parser, "undefined"));
  44. parser.hooks.expression
  45. .for("require.version")
  46. .tap(
  47. PLUGIN_NAME,
  48. toConstantDependency(parser, JSON.stringify("0.0.0"))
  49. );
  50. parser.hooks.expression
  51. .for("requirejs.onError")
  52. .tap(
  53. PLUGIN_NAME,
  54. toConstantDependency(
  55. parser,
  56. RuntimeGlobals.uncaughtErrorHandler,
  57. [RuntimeGlobals.uncaughtErrorHandler]
  58. )
  59. );
  60. };
  61. normalModuleFactory.hooks.parser
  62. .for(JAVASCRIPT_MODULE_TYPE_AUTO)
  63. .tap(PLUGIN_NAME, handler);
  64. normalModuleFactory.hooks.parser
  65. .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
  66. .tap(PLUGIN_NAME, handler);
  67. }
  68. );
  69. }
  70. };