WXL
4 天以前 2cc85c64f1c64a2dbaeae276a3e2ca8420de76b7
node_modules/webpack/lib/DllReferencePlugin.js
@@ -5,13 +5,12 @@
"use strict";
const parseJson = require("json-parse-even-better-errors");
const DelegatedModuleFactoryPlugin = require("./DelegatedModuleFactoryPlugin");
const ExternalModuleFactoryPlugin = require("./ExternalModuleFactoryPlugin");
const WebpackError = require("./WebpackError");
const DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency");
const createSchemaValidation = require("./util/create-schema-validation");
const makePathsRelative = require("./util/identifier").makePathsRelative;
const { makePathsRelative } = require("./util/identifier");
const parseJson = require("./util/parseJson");
/** @typedef {import("../declarations/WebpackOptions").Externals} Externals */
/** @typedef {import("../declarations/plugins/DllReferencePlugin").DllReferencePluginOptions} DllReferencePluginOptions */
@@ -21,36 +20,37 @@
/** @typedef {import("./Compiler").CompilationParams} CompilationParams */
/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
const validate = createSchemaValidation(
   require("../schemas/plugins/DllReferencePlugin.check"),
   () => require("../schemas/plugins/DllReferencePlugin.json"),
   {
      name: "Dll Reference Plugin",
      baseDataPath: "options"
   }
);
/** @typedef {{ path: string, data: DllReferencePluginOptionsManifest | undefined, error: Error | undefined }} CompilationDataItem */
const PLUGIN_NAME = "DllReferencePlugin";
class DllReferencePlugin {
   /**
    * Creates an instance of DllReferencePlugin.
    * @param {DllReferencePluginOptions} options options object
    */
   constructor(options) {
      validate(options);
      this.options = options;
      /** @type {WeakMap<CompilationParams, CompilationDataItem>} */
      this._compilationData = new WeakMap();
   }
   /**
    * Apply the plugin
    * 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/DllReferencePlugin.json"),
            this.options,
            {
               name: "Dll Reference Plugin",
               baseDataPath: "options"
            },
            (options) =>
               require("../schemas/plugins/DllReferencePlugin.check")(options)
         );
      });
      compiler.hooks.compilation.tap(
         PLUGIN_NAME,
         (compilation, { normalModuleFactory }) => {
@@ -60,6 +60,9 @@
            );
         }
      );
      /** @type {WeakMap<CompilationParams, CompilationDataItem>} */
      const compilationData = new WeakMap();
      compiler.hooks.beforeCompile.tapAsync(PLUGIN_NAME, (params, callback) => {
         if ("manifest" in this.options) {
@@ -77,9 +80,12 @@
                  // Catch errors parsing the manifest so that blank
                  // or malformed manifest files don't kill the process.
                  try {
                     data.data = parseJson(
                        /** @type {Buffer} */ (result).toString("utf8")
                     );
                     data.data =
                        /** @type {DllReferencePluginOptionsManifest} */
                        (
                           /** @type {unknown} */
                           (parseJson(/** @type {Buffer} */ (result).toString("utf8")))
                        );
                  } catch (parseErr) {
                     // Store the error in the params so that it can
                     // be added as a compilation error later on.
@@ -93,7 +99,7 @@
                        /** @type {Error} */ (parseErr).message
                     );
                  }
                  this._compilationData.set(params, data);
                  compilationData.set(params, data);
                  return callback();
               });
               return;
@@ -109,11 +115,12 @@
            "content" in this.options ? this.options.content : undefined;
         if ("manifest" in this.options) {
            const manifestParameter = this.options.manifest;
            /** @type {undefined | DllReferencePluginOptionsManifest} */
            let manifest;
            if (typeof manifestParameter === "string") {
               const data =
                  /** @type {CompilationDataItem} */
                  (this._compilationData.get(params));
                  (compilationData.get(params));
               // If there was an error parsing the manifest
               // file, exit now because the error will be added
               // as a compilation error in the "compilation" hook.
@@ -155,9 +162,9 @@
         if ("manifest" in this.options) {
            const manifest = this.options.manifest;
            if (typeof manifest === "string") {
               const data = /** @type {CompilationDataItem} */ (
                  this._compilationData.get(params)
               );
               const data =
                  /** @type {CompilationDataItem} */
                  (compilationData.get(params));
               // If there was an error parsing the manifest file, add the
               // error as a compilation error to make the compilation fail.
               if (data.error) {
@@ -174,6 +181,7 @@
class DllManifestError extends WebpackError {
   /**
    * Creates an instance of DllManifestError.
    * @param {string} filename filename of the manifest
    * @param {string} message error message
    */