| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
- const FlagAllModulesAsUsedPlugin = require("../FlagAllModulesAsUsedPlugin");
- const DllEntryPlugin = require("./DllEntryPlugin");
- const LibManifestPlugin = require("./LibManifestPlugin");
- /**
- * @import {
- * DllPluginOptions
- * } from "../../declarations/plugins/dll/DllPlugin"
- */
- /** @import Compiler from "../Compiler" */
- /** @import { Entries, Options } from "./DllEntryPlugin" */
- const PLUGIN_NAME = "DllPlugin";
- class DllPlugin {
- /**
- * Creates an instance of DllPlugin.
- * @param {DllPluginOptions} options options object
- */
- constructor(options) {
- /** @type {DllPluginOptions} */
- this.options = options;
- }
- /**
- * Applies the plugin by registering its hooks on the compiler.
- * @param {Compiler} compiler the compiler instance
- * @returns {void}
- */
- apply(compiler) {
- compiler.hooks.validate.tap(PLUGIN_NAME, () => {
- compiler.validate(
- () => require("../../schemas/plugins/dll/DllPlugin.json"),
- this.options,
- {
- name: "Dll Plugin",
- baseDataPath: "options"
- },
- (options) =>
- require("../../schemas/plugins/dll/DllPlugin.check")(options)
- );
- });
- const entryOnly = this.options.entryOnly !== false;
- compiler.hooks.entryOption.tap(PLUGIN_NAME, (context, entry) => {
- if (typeof entry !== "function") {
- for (const name of Object.keys(entry)) {
- /** @type {Options} */
- const options = { name };
- new DllEntryPlugin(
- context,
- /** @type {Entries} */
- (entry[name].import),
- options
- ).apply(compiler);
- }
- } else {
- throw new Error(
- `${PLUGIN_NAME} doesn't support dynamic entry (function) yet`
- );
- }
- return true;
- });
- new LibManifestPlugin({ ...this.options, entryOnly }).apply(compiler);
- if (!entryOnly) {
- new FlagAllModulesAsUsedPlugin(PLUGIN_NAME).apply(compiler);
- compiler.hooks.compilation.tap(
- PLUGIN_NAME,
- (_compilation, { normalModuleFactory }) => {
- normalModuleFactory.hooks.module.tap(
- { name: PLUGIN_NAME, stage: 10 },
- (module) => {
- if (module.factoryMeta === undefined) {
- module.factoryMeta = {};
- }
- module.factoryMeta.sideEffectFree = false;
- return module;
- }
- );
- }
- );
- }
- }
- }
- module.exports = DllPlugin;
|