DllEntryPlugin.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const DllModuleFactory = require("./DllModuleFactory");
  7. const DllEntryDependency = require("./dependencies/DllEntryDependency");
  8. const EntryDependency = require("./dependencies/EntryDependency");
  9. /** @typedef {import("./Compiler")} Compiler */
  10. /** @typedef {string[]} Entries */
  11. /** @typedef {{ name: string, filename: TODO }} Options */
  12. class DllEntryPlugin {
  13. /**
  14. * @param {string} context context
  15. * @param {Entries} entries entry names
  16. * @param {Options} options options
  17. */
  18. constructor(context, entries, options) {
  19. this.context = context;
  20. this.entries = entries;
  21. this.options = options;
  22. }
  23. /**
  24. * Apply the plugin
  25. * @param {Compiler} compiler the compiler instance
  26. * @returns {void}
  27. */
  28. apply(compiler) {
  29. compiler.hooks.compilation.tap(
  30. "DllEntryPlugin",
  31. (compilation, { normalModuleFactory }) => {
  32. const dllModuleFactory = new DllModuleFactory();
  33. compilation.dependencyFactories.set(
  34. DllEntryDependency,
  35. dllModuleFactory
  36. );
  37. compilation.dependencyFactories.set(
  38. EntryDependency,
  39. normalModuleFactory
  40. );
  41. }
  42. );
  43. compiler.hooks.make.tapAsync("DllEntryPlugin", (compilation, callback) => {
  44. compilation.addEntry(
  45. this.context,
  46. new DllEntryDependency(
  47. this.entries.map((e, idx) => {
  48. const dep = new EntryDependency(e);
  49. dep.loc = {
  50. name: this.options.name,
  51. index: idx
  52. };
  53. return dep;
  54. }),
  55. this.options.name
  56. ),
  57. this.options,
  58. error => {
  59. if (error) return callback(error);
  60. callback();
  61. }
  62. );
  63. });
  64. }
  65. }
  66. module.exports = DllEntryPlugin;