DllPlugin.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. const DllEntryPlugin = require("./DllEntryPlugin");
  7. const LibManifestPlugin = require("./LibManifestPlugin");
  8. const FlagInitialModulesAsUsedPlugin = require("./FlagInitialModulesAsUsedPlugin");
  9. const validateOptions = require("schema-utils");
  10. const schema = require("../schemas/plugins/DllPlugin.json");
  11. class DllPlugin {
  12. constructor(options) {
  13. validateOptions(schema, options, "Dll Plugin");
  14. this.options = options;
  15. }
  16. apply(compiler) {
  17. compiler.hooks.entryOption.tap("DllPlugin", (context, entry) => {
  18. const itemToPlugin = (item, name) => {
  19. if (Array.isArray(item)) {
  20. return new DllEntryPlugin(context, item, name);
  21. }
  22. throw new Error("DllPlugin: supply an Array as entry");
  23. };
  24. if (typeof entry === "object" && !Array.isArray(entry)) {
  25. Object.keys(entry).forEach(name => {
  26. itemToPlugin(entry[name], name).apply(compiler);
  27. });
  28. } else {
  29. itemToPlugin(entry, "main").apply(compiler);
  30. }
  31. return true;
  32. });
  33. new LibManifestPlugin(this.options).apply(compiler);
  34. if (!this.options.entryOnly) {
  35. new FlagInitialModulesAsUsedPlugin("DllPlugin").apply(compiler);
  36. }
  37. }
  38. }
  39. module.exports = DllPlugin;