NamedModuleIdsPlugin.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const { compareModulesByIdentifier } = require("../util/comparators");
  7. const {
  8. assignAscendingModuleIds,
  9. assignNames,
  10. getLongModuleName,
  11. getShortModuleName,
  12. getUsedModuleIdsAndModules
  13. } = require("./IdHelpers");
  14. /** @typedef {import("../Compiler")} Compiler */
  15. /**
  16. * @typedef {object} NamedModuleIdsPluginOptions
  17. * @property {string=} context context
  18. */
  19. const PLUGIN_NAME = "NamedModuleIdsPlugin";
  20. class NamedModuleIdsPlugin {
  21. /**
  22. * @param {NamedModuleIdsPluginOptions=} options options
  23. */
  24. constructor(options = {}) {
  25. /** @type {NamedModuleIdsPluginOptions} */
  26. this.options = options;
  27. }
  28. /**
  29. * Apply the plugin
  30. * @param {Compiler} compiler the compiler instance
  31. * @returns {void}
  32. */
  33. apply(compiler) {
  34. const { root } = compiler;
  35. compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
  36. const hashFunction = compilation.outputOptions.hashFunction;
  37. compilation.hooks.moduleIds.tap(PLUGIN_NAME, () => {
  38. const chunkGraph = compilation.chunkGraph;
  39. const context = this.options.context
  40. ? this.options.context
  41. : compiler.context;
  42. const [usedIds, modules] = getUsedModuleIdsAndModules(compilation);
  43. const unnamedModules = assignNames(
  44. modules,
  45. (m) => getShortModuleName(m, context, root),
  46. (m, shortName) =>
  47. getLongModuleName(shortName, m, context, hashFunction, root),
  48. compareModulesByIdentifier,
  49. usedIds,
  50. (m, name) => chunkGraph.setModuleId(m, name)
  51. );
  52. if (unnamedModules.length > 0) {
  53. assignAscendingModuleIds(usedIds, unnamedModules, compilation);
  54. }
  55. });
  56. });
  57. }
  58. }
  59. module.exports = NamedModuleIdsPlugin;