WXL
3 天以前 9bce51f651aad297ef9eb6df832bfdaf1de05d84
node_modules/webpack/lib/container/ContainerPlugin.js
@@ -5,7 +5,6 @@
"use strict";
const createSchemaValidation = require("../util/create-schema-validation");
const memoize = require("../util/memoize");
const ContainerEntryDependency = require("./ContainerEntryDependency");
const ContainerEntryModuleFactory = require("./ContainerEntryModuleFactory");
@@ -20,74 +19,80 @@
   require("./ModuleFederationPlugin")
);
const validate = createSchemaValidation(
   require("../../schemas/plugins/container/ContainerPlugin.check"),
   () => require("../../schemas/plugins/container/ContainerPlugin.json"),
   {
      name: "Container Plugin",
      baseDataPath: "options"
   }
);
const PLUGIN_NAME = "ContainerPlugin";
class ContainerPlugin {
   /**
    * Creates an instance of ContainerPlugin.
    * @param {ContainerPluginOptions} options options
    */
   constructor(options) {
      validate(options);
      this._options = {
         name: options.name,
         shareScope: options.shareScope || "default",
         library: options.library || {
            type: "var",
            name: options.name
         },
         runtime: options.runtime,
         filename: options.filename || undefined,
         exposes: /** @type {ExposesList} */ (
            parseOptions(
               options.exposes,
               (item) => ({
                  import: Array.isArray(item) ? item : [item],
                  name: undefined
               }),
               (item) => ({
                  import: Array.isArray(item.import) ? item.import : [item.import],
                  name: item.name || undefined
               })
            )
         )
      };
      /** @type {ContainerPluginOptions} */
      this.options = options;
   }
   /**
    * Apply the plugin
    * Applies the plugin by registering its hooks on the compiler.
    * @param {Compiler} compiler the compiler instance
    * @returns {void}
    */
   apply(compiler) {
      const { name, exposes, shareScope, filename, library, runtime } =
         this._options;
      compiler.hooks.validate.tap(PLUGIN_NAME, () => {
         compiler.validate(
            () => require("../../schemas/plugins/container/ContainerPlugin.json"),
            this.options,
            {
               name: "Container Plugin",
               baseDataPath: "options"
            },
            (options) =>
               require("../../schemas/plugins/container/ContainerPlugin.check")(
                  options
               )
         );
      });
      const library = this.options.library || {
         type: "var",
         name: this.options.name
      };
      if (!compiler.options.output.enabledLibraryTypes.includes(library.type)) {
         compiler.options.output.enabledLibraryTypes.push(library.type);
      }
      const exposes = /** @type {ExposesList} */ (
         parseOptions(
            this.options.exposes,
            (item) => ({
               import: Array.isArray(item) ? item : [item],
               name: undefined
            }),
            (item) => ({
               import: Array.isArray(item.import) ? item.import : [item.import],
               name: item.name || undefined
            })
         )
      );
      const shareScope = this.options.shareScope || "default";
      compiler.hooks.make.tapAsync(PLUGIN_NAME, (compilation, callback) => {
         const hooks =
            getModuleFederationPlugin().getCompilationHooks(compilation);
         const dep = new ContainerEntryDependency(name, exposes, shareScope);
         dep.loc = { name };
         const dep = new ContainerEntryDependency(
            this.options.name,
            exposes,
            shareScope
         );
         dep.loc = { name: this.options.name };
         compilation.addEntry(
            compilation.options.context,
            dep,
            {
               name,
               filename,
               runtime,
               name: this.options.name,
               filename: this.options.filename,
               runtime: this.options.runtime,
               library
            },
            (error) => {