WXL
3 天以前 9bce51f651aad297ef9eb6df832bfdaf1de05d84
node_modules/webpack/lib/WebpackOptionsApply.js
@@ -60,6 +60,7 @@
const WorkerPlugin = require("./dependencies/WorkerPlugin");
const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
const JavascriptParser = require("./javascript/JavascriptParser");
const JsonModulesPlugin = require("./json/JsonModulesPlugin");
@@ -74,8 +75,9 @@
const { cleverMerge } = require("./util/cleverMerge");
/** @typedef {import("../declarations/WebpackOptions").WebpackPluginFunction} WebpackPluginFunction */
/** @typedef {import("./webpack").WebpackPluginFunction} WebpackPluginFunction */
/** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
/** @typedef {import("./config/normalization").WebpackOptionsInterception} WebpackOptionsInterception */
/** @typedef {import("./Compiler")} Compiler */
/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
/** @typedef {import("./util/fs").IntermediateFileSystem} IntermediateFileSystem */
@@ -88,11 +90,13 @@
   }
   /**
    * Returns options object.
    * @param {WebpackOptions} options options object
    * @param {Compiler} compiler compiler object
    * @param {WebpackOptionsInterception=} interception intercepted options
    * @returns {WebpackOptions} options object
    */
   process(options, compiler) {
   process(options, compiler, interception) {
      compiler.outputPath = options.output.path;
      compiler.recordsInputPath = options.recordsInputPath || null;
      compiler.recordsOutputPath = options.recordsOutputPath || null;
@@ -111,13 +115,9 @@
         const NodeTargetPlugin = require("./node/NodeTargetPlugin");
         // Some older versions of Node.js don't support all built-in modules via import, only via `require`,
         // but шt seems like there shouldn't be a warning here since these versions are rarely used in real applications
         // but it seems like there shouldn't be a warning here since these versions are rarely used in real applications
         new NodeTargetPlugin(
            options.output.module &&
            compiler.platform.node === null &&
            compiler.platform.web === null
               ? "module-import"
               : "node-commonjs"
            options.output.module ? "module-import" : "node-commonjs"
         ).apply(compiler);
         // Handle external CSS `@import` and `url()`
@@ -129,8 +129,8 @@
               "module",
               ({ request, dependencyType, contextInfo }, callback) => {
                  if (
                     /\.css(\?|$)/.test(contextInfo.issuer) &&
                     /^(\/\/|https?:\/\/|#)/.test(request)
                     /\.css(?:\?|$)/.test(contextInfo.issuer) &&
                     /^(?:\/\/|https?:\/\/|#)/.test(request)
                  ) {
                     if (dependencyType === "url") {
                        return callback(null, `asset ${request}`);
@@ -156,7 +156,7 @@
         const ExternalsPlugin = require("./ExternalsPlugin");
         new ExternalsPlugin(type, ({ request, dependencyType }, callback) => {
            if (/^(\/\/|https?:\/\/|#|std:|jsr:|npm:)/.test(request)) {
            if (/^(?:\/\/|https?:\/\/|#|std:|jsr:|npm:)/.test(request)) {
               if (dependencyType === "url") {
                  return callback(null, `asset ${request}`);
               } else if (
@@ -166,7 +166,7 @@
                  options.experiments.css
               ) {
                  return callback(null, `css-import ${request}`);
               } else if (/^(\/\/|https?:\/\/|std:|jsr:|npm:)/.test(request)) {
               } else if (/^(?:\/\/|https?:\/\/|std:|jsr:|npm:)/.test(request)) {
                  return callback(null, `${type} ${request}`);
               }
            }
@@ -315,43 +315,67 @@
         ).apply(compiler);
      }
      if (options.devtool) {
         if (options.devtool.includes("source-map")) {
            const hidden = options.devtool.includes("hidden");
            const inline = options.devtool.includes("inline");
            const evalWrapped = options.devtool.includes("eval");
            const cheap = options.devtool.includes("cheap");
            const moduleMaps = options.devtool.includes("module");
            const noSources = options.devtool.includes("nosources");
            const debugIds = options.devtool.includes("debugids");
            const Plugin = evalWrapped
               ? require("./EvalSourceMapDevToolPlugin")
               : require("./SourceMapDevToolPlugin");
            new Plugin({
               filename: inline ? null : options.output.sourceMapFilename,
               moduleFilenameTemplate: options.output.devtoolModuleFilenameTemplate,
               fallbackModuleFilenameTemplate:
                  options.output.devtoolFallbackModuleFilenameTemplate,
               append: hidden ? false : undefined,
               module: moduleMaps ? true : !cheap,
               columns: !cheap,
               noSources,
               namespace: options.output.devtoolNamespace,
               debugIds
            }).apply(compiler);
         } else if (options.devtool.includes("eval")) {
            const EvalDevToolModulePlugin = require("./EvalDevToolModulePlugin");
      let devtool =
         interception === undefined ? options.devtool : interception.devtool;
      devtool = Array.isArray(devtool)
         ? devtool
         : typeof devtool === "string"
            ? [{ type: "all", use: devtool }]
            : [];
            new EvalDevToolModulePlugin({
               moduleFilenameTemplate: options.output.devtoolModuleFilenameTemplate,
               namespace: options.output.devtoolNamespace
            }).apply(compiler);
      for (const item of devtool) {
         const { type, use } = item;
         if (use) {
            if (use.includes("source-map")) {
               const hidden = use.includes("hidden");
               const inline = use.includes("inline");
               const evalWrapped = use.includes("eval");
               const cheap = use.includes("cheap");
               const moduleMaps = use.includes("module");
               const noSources = use.includes("nosources");
               const debugIds = use.includes("debugids");
               const Plugin = evalWrapped
                  ? require("./EvalSourceMapDevToolPlugin")
                  : require("./SourceMapDevToolPlugin");
               const assetExt =
                  type === "javascript"
                     ? /\.((c|m)?js)($|\?)/i
                     : type === "css"
                        ? /\.(css)($|\?)/i
                        : /\.((c|m)?js|css)($|\?)/i;
               new Plugin({
                  test: evalWrapped ? undefined : assetExt,
                  filename: inline ? null : options.output.sourceMapFilename,
                  moduleFilenameTemplate:
                     options.output.devtoolModuleFilenameTemplate,
                  fallbackModuleFilenameTemplate:
                     options.output.devtoolFallbackModuleFilenameTemplate,
                  append: hidden ? false : undefined,
                  module: moduleMaps ? true : !cheap,
                  columns: !cheap,
                  noSources,
                  namespace: options.output.devtoolNamespace,
                  debugIds
               }).apply(compiler);
            } else if (use.includes("eval")) {
               const EvalDevToolModulePlugin = require("./EvalDevToolModulePlugin");
               new EvalDevToolModulePlugin({
                  moduleFilenameTemplate:
                     options.output.devtoolModuleFilenameTemplate,
                  namespace: options.output.devtoolNamespace
               }).apply(compiler);
            }
         }
      }
      new JavascriptModulesPlugin().apply(compiler);
      new JsonModulesPlugin().apply(compiler);
      new AssetModulesPlugin().apply(compiler);
      new AssetModulesPlugin({
         sideEffectFree: options.experiments.futureDefaults
      }).apply(compiler);
      if (!options.experiments.outputModule) {
         if (options.output.module) {
@@ -408,6 +432,39 @@
            typeof options.experiments.lazyCompilation === "object"
               ? options.experiments.lazyCompilation
               : {};
         const isUniversalTarget =
            options.output.module &&
            compiler.platform.node === null &&
            compiler.platform.web === null;
         if (isUniversalTarget) {
            const emitter = require.resolve("../hot/emitter-event-target.js");
            const NormalModuleReplacementPlugin = require("./NormalModuleReplacementPlugin");
            // Override emitter that using `EventEmitter` to `EventTarget`
            // TODO webpack 6 - migrate to `EventTarget` by default
            new NormalModuleReplacementPlugin(/emitter(\.js)?$/, (result) => {
               if (
                  /webpack[/\\]hot|webpack-dev-server[/\\]client|webpack-hot-middleware[/\\]client/.test(
                     result.context
                  )
               ) {
                  result.request = emitter;
               }
               return result;
            }).apply(compiler);
         }
         const backend = require.resolve(
            isUniversalTarget
               ? "../hot/lazy-compilation-universal.js"
               : `../hot/lazy-compilation-${
                     options.externalsPresets.node ? "node" : "web"
                  }.js`
         );
         new LazyCompilationPlugin({
            backend:
               typeof lazyOptions.backend === "function"
@@ -415,12 +472,7 @@
                  : require("./hmr/lazyCompilationBackend")({
                        ...lazyOptions.backend,
                        client:
                           (lazyOptions.backend && lazyOptions.backend.client) ||
                           require.resolve(
                              `../hot/lazy-compilation-${
                                 options.externalsPresets.node ? "node" : "web"
                              }.js`
                           )
                           (lazyOptions.backend && lazyOptions.backend.client) || backend
                     }),
            entries: !lazyOptions || lazyOptions.entries !== false,
            imports: !lazyOptions || lazyOptions.imports !== false,
@@ -435,11 +487,18 @@
         new HttpUriPlugin(httpOptions).apply(compiler);
      }
      if (options.experiments.deferImport) {
         const JavascriptParser = require("./javascript/JavascriptParser");
      if (
         !(
            /** @type {typeof JavascriptParser & { __importPhasesExtended?: true }} */
            (JavascriptParser).__importPhasesExtended
         ) &&
         (options.experiments.deferImport || options.experiments.sourceImport)
      ) {
         const importPhases = require("acorn-import-phases");
         JavascriptParser.extend(importPhases({ source: false }));
         JavascriptParser.extend(importPhases({ source: true, defer: true }));
         /** @type {typeof JavascriptParser & { __importPhasesExtended?: true }} */
         (JavascriptParser).__importPhasesExtended = true;
      }
      new EntryOptionPlugin().apply(compiler);