Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

HashedModuleIdsPlugin.js 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const createHash = require("./util/createHash");
  7. const validateOptions = require("schema-utils");
  8. const schema = require("../schemas/plugins/HashedModuleIdsPlugin.json");
  9. /** @typedef {import("../declarations/plugins/HashedModuleIdsPlugin").HashedModuleIdsPluginOptions} HashedModuleIdsPluginOptions */
  10. class HashedModuleIdsPlugin {
  11. /**
  12. * @param {HashedModuleIdsPluginOptions=} options options object
  13. */
  14. constructor(options) {
  15. if (!options) options = {};
  16. validateOptions(schema, options, "Hashed Module Ids Plugin");
  17. /** @type {HashedModuleIdsPluginOptions} */
  18. this.options = Object.assign(
  19. {
  20. context: null,
  21. hashFunction: "md4",
  22. hashDigest: "base64",
  23. hashDigestLength: 4
  24. },
  25. options
  26. );
  27. }
  28. apply(compiler) {
  29. const options = this.options;
  30. compiler.hooks.compilation.tap("HashedModuleIdsPlugin", compilation => {
  31. const usedIds = new Set();
  32. compilation.hooks.beforeModuleIds.tap(
  33. "HashedModuleIdsPlugin",
  34. modules => {
  35. for (const module of modules) {
  36. if (module.id === null && module.libIdent) {
  37. const id = module.libIdent({
  38. context: this.options.context || compiler.options.context
  39. });
  40. const hash = createHash(options.hashFunction);
  41. hash.update(id);
  42. const hashId = /** @type {string} */ (hash.digest(
  43. options.hashDigest
  44. ));
  45. let len = options.hashDigestLength;
  46. while (usedIds.has(hashId.substr(0, len))) len++;
  47. module.id = hashId.substr(0, len);
  48. usedIds.add(module.id);
  49. }
  50. }
  51. }
  52. );
  53. });
  54. }
  55. }
  56. module.exports = HashedModuleIdsPlugin;