RequireJsStuffPlugin.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const ParserHelpers = require("./ParserHelpers");
  7. const ConstDependency = require("./dependencies/ConstDependency");
  8. const NullFactory = require("./NullFactory");
  9. module.exports = class RequireJsStuffPlugin {
  10. apply(compiler) {
  11. compiler.hooks.compilation.tap(
  12. "RequireJsStuffPlugin",
  13. (compilation, { normalModuleFactory }) => {
  14. compilation.dependencyFactories.set(ConstDependency, new NullFactory());
  15. compilation.dependencyTemplates.set(
  16. ConstDependency,
  17. new ConstDependency.Template()
  18. );
  19. const handler = (parser, parserOptions) => {
  20. if (
  21. typeof parserOptions.requireJs !== "undefined" &&
  22. !parserOptions.requireJs
  23. )
  24. return;
  25. parser.hooks.call
  26. .for("require.config")
  27. .tap(
  28. "RequireJsStuffPlugin",
  29. ParserHelpers.toConstantDependency(parser, "undefined")
  30. );
  31. parser.hooks.call
  32. .for("requirejs.config")
  33. .tap(
  34. "RequireJsStuffPlugin",
  35. ParserHelpers.toConstantDependency(parser, "undefined")
  36. );
  37. parser.hooks.expression
  38. .for("require.version")
  39. .tap(
  40. "RequireJsStuffPlugin",
  41. ParserHelpers.toConstantDependency(
  42. parser,
  43. JSON.stringify("0.0.0")
  44. )
  45. );
  46. parser.hooks.expression
  47. .for("requirejs.onError")
  48. .tap(
  49. "RequireJsStuffPlugin",
  50. ParserHelpers.toConstantDependencyWithWebpackRequire(
  51. parser,
  52. "__webpack_require__.oe"
  53. )
  54. );
  55. };
  56. normalModuleFactory.hooks.parser
  57. .for("javascript/auto")
  58. .tap("RequireJsStuffPlugin", handler);
  59. normalModuleFactory.hooks.parser
  60. .for("javascript/dynamic")
  61. .tap("RequireJsStuffPlugin", handler);
  62. }
  63. );
  64. }
  65. };