123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
- const OptionsApply = require("./OptionsApply");
- const AssetModulesPlugin = require("./asset/AssetModulesPlugin");
- const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
- const JsonModulesPlugin = require("./json/JsonModulesPlugin");
- const ChunkPrefetchPreloadPlugin = require("./prefetch/ChunkPrefetchPreloadPlugin");
- const EntryOptionPlugin = require("./EntryOptionPlugin");
- const RecordIdsPlugin = require("./RecordIdsPlugin");
- const RuntimePlugin = require("./RuntimePlugin");
- const APIPlugin = require("./APIPlugin");
- const CompatibilityPlugin = require("./CompatibilityPlugin");
- const ConstPlugin = require("./ConstPlugin");
- const ExportsInfoApiPlugin = require("./ExportsInfoApiPlugin");
- const WebpackIsIncludedPlugin = require("./WebpackIsIncludedPlugin");
- const TemplatedPathPlugin = require("./TemplatedPathPlugin");
- const UseStrictPlugin = require("./UseStrictPlugin");
- const WarnCaseSensitiveModulesPlugin = require("./WarnCaseSensitiveModulesPlugin");
- const DataUriPlugin = require("./schemes/DataUriPlugin");
- const FileUriPlugin = require("./schemes/FileUriPlugin");
- const ResolverCachePlugin = require("./cache/ResolverCachePlugin");
- const CommonJsPlugin = require("./dependencies/CommonJsPlugin");
- const HarmonyModulesPlugin = require("./dependencies/HarmonyModulesPlugin");
- const ImportMetaContextPlugin = require("./dependencies/ImportMetaContextPlugin");
- const ImportMetaPlugin = require("./dependencies/ImportMetaPlugin");
- const ImportPlugin = require("./dependencies/ImportPlugin");
- const LoaderPlugin = require("./dependencies/LoaderPlugin");
- const RequireContextPlugin = require("./dependencies/RequireContextPlugin");
- const RequireEnsurePlugin = require("./dependencies/RequireEnsurePlugin");
- const RequireIncludePlugin = require("./dependencies/RequireIncludePlugin");
- const SystemPlugin = require("./dependencies/SystemPlugin");
- const URLPlugin = require("./dependencies/URLPlugin");
- const WorkerPlugin = require("./dependencies/WorkerPlugin");
- const InferAsyncModulesPlugin = require("./async-modules/InferAsyncModulesPlugin");
- const JavascriptMetaInfoPlugin = require("./JavascriptMetaInfoPlugin");
- const DefaultStatsFactoryPlugin = require("./stats/DefaultStatsFactoryPlugin");
- const DefaultStatsPresetPlugin = require("./stats/DefaultStatsPresetPlugin");
- const DefaultStatsPrinterPlugin = require("./stats/DefaultStatsPrinterPlugin");
- const { cleverMerge } = require("./util/cleverMerge");
- /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
- /** @typedef {import("./Compiler")} Compiler */
- /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
- /** @typedef {import("./util/fs").IntermediateFileSystem} IntermediateFileSystem */
- class WebpackOptionsApply extends OptionsApply {
- constructor() {
- super();
- }
- /**
- * @param {WebpackOptions} options options object
- * @param {Compiler} compiler compiler object
- * @returns {WebpackOptions} options object
- */
- process(options, compiler) {
- compiler.outputPath = options.output.path;
- compiler.recordsInputPath = options.recordsInputPath || null;
- compiler.recordsOutputPath = options.recordsOutputPath || null;
- compiler.name = options.name;
- if (options.externals) {
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
- const ExternalsPlugin = require("./ExternalsPlugin");
- new ExternalsPlugin(options.externalsType, options.externals).apply(
- compiler
- );
- }
- if (options.externalsPresets.node) {
- const NodeTargetPlugin = require("./node/NodeTargetPlugin");
- new NodeTargetPlugin().apply(compiler);
- }
- if (options.externalsPresets.electronMain) {
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
- const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
- new ElectronTargetPlugin("main").apply(compiler);
- }
- if (options.externalsPresets.electronPreload) {
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
- const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
- new ElectronTargetPlugin("preload").apply(compiler);
- }
- if (options.externalsPresets.electronRenderer) {
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
- const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
- new ElectronTargetPlugin("renderer").apply(compiler);
- }
- if (
- options.externalsPresets.electron &&
- !options.externalsPresets.electronMain &&
- !options.externalsPresets.electronPreload &&
- !options.externalsPresets.electronRenderer
- ) {
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
- const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
- new ElectronTargetPlugin().apply(compiler);
- }
- if (options.externalsPresets.nwjs) {
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
- const ExternalsPlugin = require("./ExternalsPlugin");
- new ExternalsPlugin("node-commonjs", "nw.gui").apply(compiler);
- }
- if (options.externalsPresets.webAsync) {
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
- const ExternalsPlugin = require("./ExternalsPlugin");
- new ExternalsPlugin("import", ({ request, dependencyType }, callback) => {
- if (dependencyType === "url") {
- if (/^(\/\/|https?:\/\/|#)/.test(request))
- return callback(null, `asset ${request}`);
- } else if (options.experiments.css && dependencyType === "css-import") {
- if (/^(\/\/|https?:\/\/|#)/.test(request))
- return callback(null, `css-import ${request}`);
- } else if (
- options.experiments.css &&
- /^(\/\/|https?:\/\/|std:)/.test(request)
- ) {
- if (/^\.css(\?|$)/.test(request))
- return callback(null, `css-import ${request}`);
- return callback(null, `import ${request}`);
- }
- callback();
- }).apply(compiler);
- } else if (options.externalsPresets.web) {
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
- const ExternalsPlugin = require("./ExternalsPlugin");
- new ExternalsPlugin("module", ({ request, dependencyType }, callback) => {
- if (dependencyType === "url") {
- if (/^(\/\/|https?:\/\/|#)/.test(request))
- return callback(null, `asset ${request}`);
- } else if (options.experiments.css && dependencyType === "css-import") {
- if (/^(\/\/|https?:\/\/|#)/.test(request))
- return callback(null, `css-import ${request}`);
- } else if (/^(\/\/|https?:\/\/|std:)/.test(request)) {
- if (options.experiments.css && /^\.css((\?)|$)/.test(request))
- return callback(null, `css-import ${request}`);
- return callback(null, `module ${request}`);
- }
- callback();
- }).apply(compiler);
- } else if (options.externalsPresets.node) {
- if (options.experiments.css) {
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
- const ExternalsPlugin = require("./ExternalsPlugin");
- new ExternalsPlugin(
- "module",
- ({ request, dependencyType }, callback) => {
- if (dependencyType === "url") {
- if (/^(\/\/|https?:\/\/|#)/.test(request))
- return callback(null, `asset ${request}`);
- } else if (dependencyType === "css-import") {
- if (/^(\/\/|https?:\/\/|#)/.test(request))
- return callback(null, `css-import ${request}`);
- } else if (/^(\/\/|https?:\/\/|std:)/.test(request)) {
- if (/^\.css(\?|$)/.test(request))
- return callback(null, `css-import ${request}`);
- return callback(null, `module ${request}`);
- }
- callback();
- }
- ).apply(compiler);
- }
- }
- new ChunkPrefetchPreloadPlugin().apply(compiler);
- if (typeof options.output.chunkFormat === "string") {
- switch (options.output.chunkFormat) {
- case "array-push": {
- const ArrayPushCallbackChunkFormatPlugin = require("./javascript/ArrayPushCallbackChunkFormatPlugin");
- new ArrayPushCallbackChunkFormatPlugin().apply(compiler);
- break;
- }
- case "commonjs": {
- const CommonJsChunkFormatPlugin = require("./javascript/CommonJsChunkFormatPlugin");
- new CommonJsChunkFormatPlugin().apply(compiler);
- break;
- }
- case "module": {
- const ModuleChunkFormatPlugin = require("./esm/ModuleChunkFormatPlugin");
- new ModuleChunkFormatPlugin().apply(compiler);
- break;
- }
- default:
- throw new Error(
- "Unsupported chunk format '" + options.output.chunkFormat + "'."
- );
- }
- }
- if (options.output.enabledChunkLoadingTypes.length > 0) {
- for (const type of options.output.enabledChunkLoadingTypes) {
- const EnableChunkLoadingPlugin = require("./javascript/EnableChunkLoadingPlugin");
- new EnableChunkLoadingPlugin(type).apply(compiler);
- }
- }
- if (options.output.enabledWasmLoadingTypes.length > 0) {
- for (const type of options.output.enabledWasmLoadingTypes) {
- const EnableWasmLoadingPlugin = require("./wasm/EnableWasmLoadingPlugin");
- new EnableWasmLoadingPlugin(type).apply(compiler);
- }
- }
- if (options.output.enabledLibraryTypes.length > 0) {
- for (const type of options.output.enabledLibraryTypes) {
- const EnableLibraryPlugin = require("./library/EnableLibraryPlugin");
- new EnableLibraryPlugin(type).apply(compiler);
- }
- }
- if (options.output.pathinfo) {
- const ModuleInfoHeaderPlugin = require("./ModuleInfoHeaderPlugin");
- new ModuleInfoHeaderPlugin(options.output.pathinfo !== true).apply(
- compiler
- );
- }
- if (options.output.clean) {
- const CleanPlugin = require("./CleanPlugin");
- new CleanPlugin(
- options.output.clean === true ? {} : options.output.clean
- ).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 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 ? false : true,
- columns: cheap ? false : true,
- noSources: noSources,
- namespace: options.output.devtoolNamespace
- }).apply(compiler);
- } else if (options.devtool.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);
- if (!options.experiments.outputModule) {
- if (options.output.module) {
- throw new Error(
- "'output.module: true' is only allowed when 'experiments.outputModule' is enabled"
- );
- }
- if (options.output.enabledLibraryTypes.includes("module")) {
- throw new Error(
- "library type \"module\" is only allowed when 'experiments.outputModule' is enabled"
- );
- }
- if (options.output.enabledLibraryTypes.includes("modern-module")) {
- throw new Error(
- "library type \"modern-module\" is only allowed when 'experiments.outputModule' is enabled"
- );
- }
- if (options.externalsType === "module") {
- throw new Error(
- "'externalsType: \"module\"' is only allowed when 'experiments.outputModule' is enabled"
- );
- }
- }
- if (options.experiments.syncWebAssembly) {
- const WebAssemblyModulesPlugin = require("./wasm-sync/WebAssemblyModulesPlugin");
- new WebAssemblyModulesPlugin({
- mangleImports: options.optimization.mangleWasmImports
- }).apply(compiler);
- }
- if (options.experiments.asyncWebAssembly) {
- const AsyncWebAssemblyModulesPlugin = require("./wasm-async/AsyncWebAssemblyModulesPlugin");
- new AsyncWebAssemblyModulesPlugin({
- mangleImports: options.optimization.mangleWasmImports
- }).apply(compiler);
- }
- if (options.experiments.css) {
- const CssModulesPlugin = require("./css/CssModulesPlugin");
- new CssModulesPlugin().apply(compiler);
- }
- if (options.experiments.lazyCompilation) {
- const LazyCompilationPlugin = require("./hmr/LazyCompilationPlugin");
- const lazyOptions =
- typeof options.experiments.lazyCompilation === "object"
- ? options.experiments.lazyCompilation
- : null;
- new LazyCompilationPlugin({
- backend:
- typeof lazyOptions.backend === "function"
- ? lazyOptions.backend
- : require("./hmr/lazyCompilationBackend")({
- ...lazyOptions.backend,
- client:
- (lazyOptions.backend && lazyOptions.backend.client) ||
- require.resolve(
- `../hot/lazy-compilation-${
- options.externalsPresets.node ? "node" : "web"
- }.js`
- )
- }),
- entries: !lazyOptions || lazyOptions.entries !== false,
- imports: !lazyOptions || lazyOptions.imports !== false,
- test: (lazyOptions && lazyOptions.test) || undefined
- }).apply(compiler);
- }
- if (options.experiments.buildHttp) {
- const HttpUriPlugin = require("./schemes/HttpUriPlugin");
- const httpOptions = options.experiments.buildHttp;
- new HttpUriPlugin(httpOptions).apply(compiler);
- }
- new EntryOptionPlugin().apply(compiler);
- compiler.hooks.entryOption.call(options.context, options.entry);
- new RuntimePlugin().apply(compiler);
- new InferAsyncModulesPlugin().apply(compiler);
- new DataUriPlugin().apply(compiler);
- new FileUriPlugin().apply(compiler);
- new CompatibilityPlugin().apply(compiler);
- new HarmonyModulesPlugin({
- topLevelAwait: options.experiments.topLevelAwait
- }).apply(compiler);
- if (options.amd !== false) {
- const AMDPlugin = require("./dependencies/AMDPlugin");
- const RequireJsStuffPlugin = require("./RequireJsStuffPlugin");
- new AMDPlugin(options.amd || {}).apply(compiler);
- new RequireJsStuffPlugin().apply(compiler);
- }
- new CommonJsPlugin().apply(compiler);
- new LoaderPlugin({}).apply(compiler);
- if (options.node !== false) {
- const NodeStuffPlugin = require("./NodeStuffPlugin");
- new NodeStuffPlugin(options.node).apply(compiler);
- }
- new APIPlugin({
- module: options.output.module
- }).apply(compiler);
- new ExportsInfoApiPlugin().apply(compiler);
- new WebpackIsIncludedPlugin().apply(compiler);
- new ConstPlugin().apply(compiler);
- new UseStrictPlugin().apply(compiler);
- new RequireIncludePlugin().apply(compiler);
- new RequireEnsurePlugin().apply(compiler);
- new RequireContextPlugin().apply(compiler);
- new ImportPlugin().apply(compiler);
- new ImportMetaContextPlugin().apply(compiler);
- new SystemPlugin().apply(compiler);
- new ImportMetaPlugin().apply(compiler);
- new URLPlugin().apply(compiler);
- new WorkerPlugin(
- options.output.workerChunkLoading,
- options.output.workerWasmLoading,
- options.output.module,
- options.output.workerPublicPath
- ).apply(compiler);
- new DefaultStatsFactoryPlugin().apply(compiler);
- new DefaultStatsPresetPlugin().apply(compiler);
- new DefaultStatsPrinterPlugin().apply(compiler);
- new JavascriptMetaInfoPlugin().apply(compiler);
- if (typeof options.mode !== "string") {
- const WarnNoModeSetPlugin = require("./WarnNoModeSetPlugin");
- new WarnNoModeSetPlugin().apply(compiler);
- }
- const EnsureChunkConditionsPlugin = require("./optimize/EnsureChunkConditionsPlugin");
- new EnsureChunkConditionsPlugin().apply(compiler);
- if (options.optimization.removeAvailableModules) {
- const RemoveParentModulesPlugin = require("./optimize/RemoveParentModulesPlugin");
- new RemoveParentModulesPlugin().apply(compiler);
- }
- if (options.optimization.removeEmptyChunks) {
- const RemoveEmptyChunksPlugin = require("./optimize/RemoveEmptyChunksPlugin");
- new RemoveEmptyChunksPlugin().apply(compiler);
- }
- if (options.optimization.mergeDuplicateChunks) {
- const MergeDuplicateChunksPlugin = require("./optimize/MergeDuplicateChunksPlugin");
- new MergeDuplicateChunksPlugin().apply(compiler);
- }
- if (options.optimization.flagIncludedChunks) {
- const FlagIncludedChunksPlugin = require("./optimize/FlagIncludedChunksPlugin");
- new FlagIncludedChunksPlugin().apply(compiler);
- }
- if (options.optimization.sideEffects) {
- const SideEffectsFlagPlugin = require("./optimize/SideEffectsFlagPlugin");
- new SideEffectsFlagPlugin(
- options.optimization.sideEffects === true
- ).apply(compiler);
- }
- if (options.optimization.providedExports) {
- const FlagDependencyExportsPlugin = require("./FlagDependencyExportsPlugin");
- new FlagDependencyExportsPlugin().apply(compiler);
- }
- if (options.optimization.usedExports) {
- const FlagDependencyUsagePlugin = require("./FlagDependencyUsagePlugin");
- new FlagDependencyUsagePlugin(
- options.optimization.usedExports === "global"
- ).apply(compiler);
- }
- if (options.optimization.innerGraph) {
- const InnerGraphPlugin = require("./optimize/InnerGraphPlugin");
- new InnerGraphPlugin().apply(compiler);
- }
- if (options.optimization.mangleExports) {
- const MangleExportsPlugin = require("./optimize/MangleExportsPlugin");
- new MangleExportsPlugin(
- options.optimization.mangleExports !== "size"
- ).apply(compiler);
- }
- if (options.optimization.concatenateModules) {
- const ModuleConcatenationPlugin = require("./optimize/ModuleConcatenationPlugin");
- new ModuleConcatenationPlugin().apply(compiler);
- }
- if (options.optimization.splitChunks) {
- const SplitChunksPlugin = require("./optimize/SplitChunksPlugin");
- new SplitChunksPlugin(options.optimization.splitChunks).apply(compiler);
- }
- if (options.optimization.runtimeChunk) {
- const RuntimeChunkPlugin = require("./optimize/RuntimeChunkPlugin");
- new RuntimeChunkPlugin(
- /** @type {{ name?: (entrypoint: { name: string }) => string }} */
- (options.optimization.runtimeChunk)
- ).apply(compiler);
- }
- if (!options.optimization.emitOnErrors) {
- const NoEmitOnErrorsPlugin = require("./NoEmitOnErrorsPlugin");
- new NoEmitOnErrorsPlugin().apply(compiler);
- }
- if (options.optimization.realContentHash) {
- const RealContentHashPlugin = require("./optimize/RealContentHashPlugin");
- new RealContentHashPlugin({
- hashFunction: options.output.hashFunction,
- hashDigest: options.output.hashDigest
- }).apply(compiler);
- }
- if (options.optimization.checkWasmTypes) {
- const WasmFinalizeExportsPlugin = require("./wasm-sync/WasmFinalizeExportsPlugin");
- new WasmFinalizeExportsPlugin().apply(compiler);
- }
- const moduleIds = options.optimization.moduleIds;
- if (moduleIds) {
- switch (moduleIds) {
- case "natural": {
- const NaturalModuleIdsPlugin = require("./ids/NaturalModuleIdsPlugin");
- new NaturalModuleIdsPlugin().apply(compiler);
- break;
- }
- case "named": {
- const NamedModuleIdsPlugin = require("./ids/NamedModuleIdsPlugin");
- new NamedModuleIdsPlugin().apply(compiler);
- break;
- }
- case "hashed": {
- const WarnDeprecatedOptionPlugin = require("./WarnDeprecatedOptionPlugin");
- const HashedModuleIdsPlugin = require("./ids/HashedModuleIdsPlugin");
- new WarnDeprecatedOptionPlugin(
- "optimization.moduleIds",
- "hashed",
- "deterministic"
- ).apply(compiler);
- new HashedModuleIdsPlugin({
- hashFunction: options.output.hashFunction
- }).apply(compiler);
- break;
- }
- case "deterministic": {
- const DeterministicModuleIdsPlugin = require("./ids/DeterministicModuleIdsPlugin");
- new DeterministicModuleIdsPlugin().apply(compiler);
- break;
- }
- case "size": {
- const OccurrenceModuleIdsPlugin = require("./ids/OccurrenceModuleIdsPlugin");
- new OccurrenceModuleIdsPlugin({
- prioritiseInitial: true
- }).apply(compiler);
- break;
- }
- default:
- throw new Error(
- `webpack bug: moduleIds: ${moduleIds} is not implemented`
- );
- }
- }
- const chunkIds = options.optimization.chunkIds;
- if (chunkIds) {
- switch (chunkIds) {
- case "natural": {
- const NaturalChunkIdsPlugin = require("./ids/NaturalChunkIdsPlugin");
- new NaturalChunkIdsPlugin().apply(compiler);
- break;
- }
- case "named": {
- const NamedChunkIdsPlugin = require("./ids/NamedChunkIdsPlugin");
- new NamedChunkIdsPlugin().apply(compiler);
- break;
- }
- case "deterministic": {
- const DeterministicChunkIdsPlugin = require("./ids/DeterministicChunkIdsPlugin");
- new DeterministicChunkIdsPlugin().apply(compiler);
- break;
- }
- case "size": {
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
- const OccurrenceChunkIdsPlugin = require("./ids/OccurrenceChunkIdsPlugin");
- new OccurrenceChunkIdsPlugin({
- prioritiseInitial: true
- }).apply(compiler);
- break;
- }
- case "total-size": {
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
- const OccurrenceChunkIdsPlugin = require("./ids/OccurrenceChunkIdsPlugin");
- new OccurrenceChunkIdsPlugin({
- prioritiseInitial: false
- }).apply(compiler);
- break;
- }
- default:
- throw new Error(
- `webpack bug: chunkIds: ${chunkIds} is not implemented`
- );
- }
- }
- if (options.optimization.nodeEnv) {
- const DefinePlugin = require("./DefinePlugin");
- new DefinePlugin({
- "process.env.NODE_ENV": JSON.stringify(options.optimization.nodeEnv)
- }).apply(compiler);
- }
- if (options.optimization.minimize) {
- for (const minimizer of options.optimization.minimizer) {
- if (typeof minimizer === "function") {
- minimizer.call(compiler, compiler);
- } else if (minimizer !== "..." && minimizer) {
- minimizer.apply(compiler);
- }
- }
- }
- if (options.performance) {
- const SizeLimitsPlugin = require("./performance/SizeLimitsPlugin");
- new SizeLimitsPlugin(options.performance).apply(compiler);
- }
- new TemplatedPathPlugin().apply(compiler);
- new RecordIdsPlugin({
- portableIds: options.optimization.portableRecords
- }).apply(compiler);
- new WarnCaseSensitiveModulesPlugin().apply(compiler);
- const AddManagedPathsPlugin = require("./cache/AddManagedPathsPlugin");
- new AddManagedPathsPlugin(
- options.snapshot.managedPaths,
- options.snapshot.immutablePaths,
- options.snapshot.unmanagedPaths
- ).apply(compiler);
- if (options.cache && typeof options.cache === "object") {
- const cacheOptions = options.cache;
- switch (cacheOptions.type) {
- case "memory": {
- if (isFinite(cacheOptions.maxGenerations)) {
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
- const MemoryWithGcCachePlugin = require("./cache/MemoryWithGcCachePlugin");
- new MemoryWithGcCachePlugin({
- maxGenerations: cacheOptions.maxGenerations
- }).apply(compiler);
- } else {
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
- const MemoryCachePlugin = require("./cache/MemoryCachePlugin");
- new MemoryCachePlugin().apply(compiler);
- }
- if (cacheOptions.cacheUnaffected) {
- if (!options.experiments.cacheUnaffected) {
- throw new Error(
- "'cache.cacheUnaffected: true' is only allowed when 'experiments.cacheUnaffected' is enabled"
- );
- }
- compiler.moduleMemCaches = new Map();
- }
- break;
- }
- case "filesystem": {
- const AddBuildDependenciesPlugin = require("./cache/AddBuildDependenciesPlugin");
- for (const key in cacheOptions.buildDependencies) {
- const list = cacheOptions.buildDependencies[key];
- new AddBuildDependenciesPlugin(list).apply(compiler);
- }
- if (!isFinite(cacheOptions.maxMemoryGenerations)) {
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
- const MemoryCachePlugin = require("./cache/MemoryCachePlugin");
- new MemoryCachePlugin().apply(compiler);
- } else if (cacheOptions.maxMemoryGenerations !== 0) {
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
- const MemoryWithGcCachePlugin = require("./cache/MemoryWithGcCachePlugin");
- new MemoryWithGcCachePlugin({
- maxGenerations: cacheOptions.maxMemoryGenerations
- }).apply(compiler);
- }
- if (cacheOptions.memoryCacheUnaffected) {
- if (!options.experiments.cacheUnaffected) {
- throw new Error(
- "'cache.memoryCacheUnaffected: true' is only allowed when 'experiments.cacheUnaffected' is enabled"
- );
- }
- compiler.moduleMemCaches = new Map();
- }
- switch (cacheOptions.store) {
- case "pack": {
- const IdleFileCachePlugin = require("./cache/IdleFileCachePlugin");
- const PackFileCacheStrategy = require("./cache/PackFileCacheStrategy");
- new IdleFileCachePlugin(
- new PackFileCacheStrategy({
- compiler,
- fs: /** @type {IntermediateFileSystem} */ (
- compiler.intermediateFileSystem
- ),
- context: options.context,
- cacheLocation: cacheOptions.cacheLocation,
- version: cacheOptions.version,
- logger: compiler.getInfrastructureLogger(
- "webpack.cache.PackFileCacheStrategy"
- ),
- snapshot: options.snapshot,
- maxAge: cacheOptions.maxAge,
- profile: cacheOptions.profile,
- allowCollectingMemory: cacheOptions.allowCollectingMemory,
- compression: cacheOptions.compression,
- readonly: cacheOptions.readonly
- }),
- cacheOptions.idleTimeout,
- cacheOptions.idleTimeoutForInitialStore,
- cacheOptions.idleTimeoutAfterLargeChanges
- ).apply(compiler);
- break;
- }
- default:
- throw new Error("Unhandled value for cache.store");
- }
- break;
- }
- default:
- // @ts-expect-error Property 'type' does not exist on type 'never'. ts(2339)
- throw new Error(`Unknown cache type ${cacheOptions.type}`);
- }
- }
- new ResolverCachePlugin().apply(compiler);
- if (options.ignoreWarnings && options.ignoreWarnings.length > 0) {
- const IgnoreWarningsPlugin = require("./IgnoreWarningsPlugin");
- new IgnoreWarningsPlugin(options.ignoreWarnings).apply(compiler);
- }
- compiler.hooks.afterPlugins.call(compiler);
- if (!compiler.inputFileSystem) {
- throw new Error("No input filesystem provided");
- }
- compiler.resolverFactory.hooks.resolveOptions
- .for("normal")
- .tap("WebpackOptionsApply", resolveOptions => {
- resolveOptions = cleverMerge(options.resolve, resolveOptions);
- resolveOptions.fileSystem =
- /** @type {InputFileSystem} */
- (compiler.inputFileSystem);
- return resolveOptions;
- });
- compiler.resolverFactory.hooks.resolveOptions
- .for("context")
- .tap("WebpackOptionsApply", resolveOptions => {
- resolveOptions = cleverMerge(options.resolve, resolveOptions);
- resolveOptions.fileSystem =
- /** @type {InputFileSystem} */
- (compiler.inputFileSystem);
- resolveOptions.resolveToContext = true;
- return resolveOptions;
- });
- compiler.resolverFactory.hooks.resolveOptions
- .for("loader")
- .tap("WebpackOptionsApply", resolveOptions => {
- resolveOptions = cleverMerge(options.resolveLoader, resolveOptions);
- resolveOptions.fileSystem =
- /** @type {InputFileSystem} */
- (compiler.inputFileSystem);
- return resolveOptions;
- });
- compiler.hooks.afterResolvers.call(compiler);
- return options;
- }
- }
- module.exports = WebpackOptionsApply;
|