APIPlugin.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const ConstDependency = require("./dependencies/ConstDependency");
  7. const ParserHelpers = require("./ParserHelpers");
  8. const NullFactory = require("./NullFactory");
  9. const REPLACEMENTS = {
  10. __webpack_require__: "__webpack_require__", // eslint-disable-line camelcase
  11. __webpack_public_path__: "__webpack_require__.p", // eslint-disable-line camelcase
  12. __webpack_modules__: "__webpack_require__.m", // eslint-disable-line camelcase
  13. __webpack_chunk_load__: "__webpack_require__.e", // eslint-disable-line camelcase
  14. __non_webpack_require__: "require", // eslint-disable-line camelcase
  15. __webpack_nonce__: "__webpack_require__.nc", // eslint-disable-line camelcase
  16. "require.onError": "__webpack_require__.oe" // eslint-disable-line camelcase
  17. };
  18. const REPLACEMENT_TYPES = {
  19. __webpack_public_path__: "string", // eslint-disable-line camelcase
  20. __webpack_require__: "function", // eslint-disable-line camelcase
  21. __webpack_modules__: "object", // eslint-disable-line camelcase
  22. __webpack_chunk_load__: "function", // eslint-disable-line camelcase
  23. __webpack_nonce__: "string" // eslint-disable-line camelcase
  24. };
  25. class APIPlugin {
  26. apply(compiler) {
  27. compiler.plugin("compilation", (compilation, params) => {
  28. compilation.dependencyFactories.set(ConstDependency, new NullFactory());
  29. compilation.dependencyTemplates.set(ConstDependency, new ConstDependency.Template());
  30. params.normalModuleFactory.plugin("parser", parser => {
  31. Object.keys(REPLACEMENTS).forEach(key => {
  32. parser.plugin(`expression ${key}`, ParserHelpers.toConstantDependency(REPLACEMENTS[key]));
  33. parser.plugin(`evaluate typeof ${key}`, ParserHelpers.evaluateToString(REPLACEMENT_TYPES[key]));
  34. });
  35. });
  36. });
  37. }
  38. }
  39. module.exports = APIPlugin;