@eriche/webpack 4.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -0
- package/README.md +784 -0
- package/SECURITY.md +9 -0
- package/bin/webpack.js +171 -0
- package/buildin/amd-define.js +3 -0
- package/buildin/amd-options.js +2 -0
- package/buildin/global.js +20 -0
- package/buildin/harmony-module.js +24 -0
- package/buildin/module.js +22 -0
- package/buildin/system.js +7 -0
- package/declarations/WebpackOptions.d.ts +1466 -0
- package/declarations/plugins/BannerPlugin.d.ts +49 -0
- package/declarations/plugins/DllPlugin.d.ts +32 -0
- package/declarations/plugins/DllReferencePlugin.d.ts +126 -0
- package/declarations/plugins/HashedModuleIdsPlugin.d.ts +24 -0
- package/declarations/plugins/IgnorePlugin.d.ts +27 -0
- package/declarations/plugins/LoaderOptionsPlugin.d.ts +27 -0
- package/declarations/plugins/ProgressPlugin.d.ts +42 -0
- package/declarations/plugins/SourceMapDevToolPlugin.d.ts +94 -0
- package/declarations/plugins/WatchIgnorePlugin.d.ts +10 -0
- package/declarations/plugins/debug/ProfilingPlugin.d.ts +12 -0
- package/declarations/plugins/optimize/AggressiveSplittingPlugin.d.ts +24 -0
- package/declarations/plugins/optimize/LimitChunkCountPlugin.d.ts +16 -0
- package/declarations/plugins/optimize/MinChunkSizePlugin.d.ts +12 -0
- package/declarations/plugins/optimize/OccurrenceOrderChunkIdsPlugin.d.ts +12 -0
- package/declarations/plugins/optimize/OccurrenceOrderModuleIdsPlugin.d.ts +12 -0
- package/hot/dev-server.js +61 -0
- package/hot/emitter.js +2 -0
- package/hot/log-apply-result.js +44 -0
- package/hot/log.js +59 -0
- package/hot/only-dev-server.js +102 -0
- package/hot/poll.js +37 -0
- package/hot/signal.js +62 -0
- package/lib/APIPlugin.js +84 -0
- package/lib/AbstractMethodError.js +43 -0
- package/lib/AmdMainTemplatePlugin.js +106 -0
- package/lib/AsyncDependenciesBlock.js +110 -0
- package/lib/AsyncDependencyToInitialChunkError.js +31 -0
- package/lib/AutomaticPrefetchPlugin.js +57 -0
- package/lib/BannerPlugin.js +122 -0
- package/lib/BasicEvaluatedExpression.js +248 -0
- package/lib/CachePlugin.js +100 -0
- package/lib/CaseSensitiveModulesWarning.js +67 -0
- package/lib/Chunk.js +875 -0
- package/lib/ChunkGroup.js +513 -0
- package/lib/ChunkRenderError.js +32 -0
- package/lib/ChunkTemplate.js +87 -0
- package/lib/CommentCompilationWarning.js +32 -0
- package/lib/CommonJsStuffPlugin.js +116 -0
- package/lib/CompatibilityPlugin.js +70 -0
- package/lib/Compilation.js +2327 -0
- package/lib/Compiler.js +735 -0
- package/lib/ConcurrentCompilationError.js +19 -0
- package/lib/ConstPlugin.js +348 -0
- package/lib/ContextExclusionPlugin.js +28 -0
- package/lib/ContextModule.js +872 -0
- package/lib/ContextModuleFactory.js +262 -0
- package/lib/ContextReplacementPlugin.js +133 -0
- package/lib/DefinePlugin.js +289 -0
- package/lib/DelegatedModule.js +114 -0
- package/lib/DelegatedModuleFactoryPlugin.js +95 -0
- package/lib/DelegatedPlugin.js +39 -0
- package/lib/DependenciesBlock.js +124 -0
- package/lib/DependenciesBlockVariable.js +72 -0
- package/lib/Dependency.js +89 -0
- package/lib/DllEntryPlugin.js +54 -0
- package/lib/DllModule.js +60 -0
- package/lib/DllModuleFactory.js +29 -0
- package/lib/DllPlugin.js +49 -0
- package/lib/DllReferencePlugin.js +156 -0
- package/lib/DynamicEntryPlugin.js +94 -0
- package/lib/EntryModuleNotFoundError.js +21 -0
- package/lib/EntryOptionPlugin.js +46 -0
- package/lib/Entrypoint.js +64 -0
- package/lib/EnvironmentPlugin.js +72 -0
- package/lib/ErrorHelpers.js +60 -0
- package/lib/EvalDevToolModulePlugin.js +27 -0
- package/lib/EvalDevToolModuleTemplatePlugin.js +61 -0
- package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +120 -0
- package/lib/EvalSourceMapDevToolPlugin.js +41 -0
- package/lib/ExportPropertyMainTemplatePlugin.js +53 -0
- package/lib/ExtendedAPIPlugin.js +88 -0
- package/lib/ExternalModule.js +179 -0
- package/lib/ExternalModuleFactoryPlugin.js +110 -0
- package/lib/ExternalsPlugin.js +23 -0
- package/lib/FlagAllModulesAsUsedPlugin.js +38 -0
- package/lib/FlagDependencyExportsPlugin.js +174 -0
- package/lib/FlagDependencyUsagePlugin.js +116 -0
- package/lib/FlagInitialModulesAsUsedPlugin.js +36 -0
- package/lib/FunctionModulePlugin.js +19 -0
- package/lib/FunctionModuleTemplatePlugin.js +102 -0
- package/lib/Generator.js +60 -0
- package/lib/GraphHelpers.js +65 -0
- package/lib/HarmonyLinkingError.js +17 -0
- package/lib/HashedModuleIdsPlugin.js +63 -0
- package/lib/HotModuleReplacement.runtime.js +721 -0
- package/lib/HotModuleReplacementPlugin.js +425 -0
- package/lib/HotUpdateChunk.js +17 -0
- package/lib/HotUpdateChunkTemplate.js +78 -0
- package/lib/IgnorePlugin.js +91 -0
- package/lib/JavascriptGenerator.js +229 -0
- package/lib/JavascriptModulesPlugin.js +185 -0
- package/lib/JsonGenerator.js +57 -0
- package/lib/JsonModulesPlugin.js +30 -0
- package/lib/JsonParser.js +27 -0
- package/lib/LibManifestPlugin.js +90 -0
- package/lib/LibraryTemplatePlugin.js +186 -0
- package/lib/LoaderOptionsPlugin.js +58 -0
- package/lib/LoaderTargetPlugin.js +24 -0
- package/lib/MainTemplate.js +568 -0
- package/lib/MemoryOutputFileSystem.js +5 -0
- package/lib/Module.js +435 -0
- package/lib/ModuleBuildError.js +52 -0
- package/lib/ModuleDependencyError.js +35 -0
- package/lib/ModuleDependencyWarning.js +25 -0
- package/lib/ModuleError.js +36 -0
- package/lib/ModuleFilenameHelpers.js +179 -0
- package/lib/ModuleNotFoundError.js +23 -0
- package/lib/ModuleParseError.js +67 -0
- package/lib/ModuleReason.js +48 -0
- package/lib/ModuleTemplate.js +93 -0
- package/lib/ModuleWarning.js +36 -0
- package/lib/MultiCompiler.js +290 -0
- package/lib/MultiEntryPlugin.js +80 -0
- package/lib/MultiModule.js +87 -0
- package/lib/MultiModuleFactory.js +23 -0
- package/lib/MultiStats.js +92 -0
- package/lib/MultiWatching.js +50 -0
- package/lib/NamedChunksPlugin.js +29 -0
- package/lib/NamedModulesPlugin.js +58 -0
- package/lib/NoEmitOnErrorsPlugin.js +20 -0
- package/lib/NoModeWarning.js +23 -0
- package/lib/NodeStuffPlugin.js +118 -0
- package/lib/NormalModule.js +582 -0
- package/lib/NormalModuleFactory.js +528 -0
- package/lib/NormalModuleReplacementPlugin.js +51 -0
- package/lib/NullFactory.js +12 -0
- package/lib/OptionsApply.js +10 -0
- package/lib/OptionsDefaulter.js +141 -0
- package/lib/Parser.js +2454 -0
- package/lib/ParserHelpers.js +103 -0
- package/lib/PrefetchPlugin.js +37 -0
- package/lib/ProgressPlugin.js +307 -0
- package/lib/ProvidePlugin.js +86 -0
- package/lib/RawModule.js +56 -0
- package/lib/RecordIdsPlugin.js +236 -0
- package/lib/RemovedPluginError.js +11 -0
- package/lib/RequestShortener.js +83 -0
- package/lib/RequireJsStuffPlugin.js +66 -0
- package/lib/ResolverFactory.js +74 -0
- package/lib/RuleSet.js +567 -0
- package/lib/RuntimeTemplate.js +336 -0
- package/lib/SetVarMainTemplatePlugin.js +69 -0
- package/lib/SingleEntryPlugin.js +63 -0
- package/lib/SizeFormatHelpers.js +24 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +49 -0
- package/lib/SourceMapDevToolPlugin.js +418 -0
- package/lib/Stats.js +1685 -0
- package/lib/SystemMainTemplatePlugin.js +137 -0
- package/lib/Template.js +291 -0
- package/lib/TemplatedPathPlugin.js +188 -0
- package/lib/UmdMainTemplatePlugin.js +305 -0
- package/lib/UnsupportedFeatureWarning.js +30 -0
- package/lib/UseStrictPlugin.js +54 -0
- package/lib/WarnCaseSensitiveModulesPlugin.js +37 -0
- package/lib/WarnNoModeSetPlugin.js +17 -0
- package/lib/WatchIgnorePlugin.js +106 -0
- package/lib/Watching.js +211 -0
- package/lib/WebpackError.js +31 -0
- package/lib/WebpackOptionsApply.js +546 -0
- package/lib/WebpackOptionsDefaulter.js +391 -0
- package/lib/WebpackOptionsValidationError.js +390 -0
- package/lib/buildChunkGraph.js +712 -0
- package/lib/compareLocations.js +52 -0
- package/lib/debug/ProfilingPlugin.js +442 -0
- package/lib/dependencies/AMDDefineDependency.js +137 -0
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +336 -0
- package/lib/dependencies/AMDPlugin.js +249 -0
- package/lib/dependencies/AMDRequireArrayDependency.js +49 -0
- package/lib/dependencies/AMDRequireContextDependency.js +20 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +47 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +274 -0
- package/lib/dependencies/AMDRequireDependency.js +135 -0
- package/lib/dependencies/AMDRequireItemDependency.js +22 -0
- package/lib/dependencies/CommonJsPlugin.js +158 -0
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -0
- package/lib/dependencies/CommonJsRequireDependency.js +22 -0
- package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +138 -0
- package/lib/dependencies/ConstDependency.js +33 -0
- package/lib/dependencies/ContextDependency.js +68 -0
- package/lib/dependencies/ContextDependencyHelpers.js +232 -0
- package/lib/dependencies/ContextDependencyTemplateAsId.js +43 -0
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +39 -0
- package/lib/dependencies/ContextElementDependency.js +21 -0
- package/lib/dependencies/CriticalDependencyWarning.js +20 -0
- package/lib/dependencies/DelegatedExportsDependency.js +33 -0
- package/lib/dependencies/DelegatedSourceDependency.js +18 -0
- package/lib/dependencies/DependencyReference.js +64 -0
- package/lib/dependencies/DllEntryDependency.js +20 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +48 -0
- package/lib/dependencies/HarmonyAcceptImportDependency.js +23 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +31 -0
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +96 -0
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +154 -0
- package/lib/dependencies/HarmonyExportExpressionDependency.js +58 -0
- package/lib/dependencies/HarmonyExportHeaderDependency.js +30 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +659 -0
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +54 -0
- package/lib/dependencies/HarmonyImportDependency.js +109 -0
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +222 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +31 -0
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +163 -0
- package/lib/dependencies/HarmonyInitDependency.js +60 -0
- package/lib/dependencies/HarmonyModulesPlugin.js +143 -0
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +26 -0
- package/lib/dependencies/ImportContextDependency.js +23 -0
- package/lib/dependencies/ImportDependenciesBlock.js +18 -0
- package/lib/dependencies/ImportDependency.js +34 -0
- package/lib/dependencies/ImportEagerDependency.js +32 -0
- package/lib/dependencies/ImportParserPlugin.js +248 -0
- package/lib/dependencies/ImportPlugin.js +79 -0
- package/lib/dependencies/ImportWeakDependency.js +34 -0
- package/lib/dependencies/JsonExportsDependency.js +26 -0
- package/lib/dependencies/LoaderDependency.js +21 -0
- package/lib/dependencies/LoaderPlugin.js +115 -0
- package/lib/dependencies/LocalModule.js +23 -0
- package/lib/dependencies/LocalModuleDependency.js +28 -0
- package/lib/dependencies/LocalModulesHelpers.js +52 -0
- package/lib/dependencies/ModuleDependency.js +23 -0
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +17 -0
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +17 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +23 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +23 -0
- package/lib/dependencies/MultiEntryDependency.js +25 -0
- package/lib/dependencies/NullDependency.js +20 -0
- package/lib/dependencies/PrefetchDependency.js +18 -0
- package/lib/dependencies/RequireContextDependency.js +22 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +56 -0
- package/lib/dependencies/RequireContextPlugin.js +143 -0
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +33 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +116 -0
- package/lib/dependencies/RequireEnsureDependency.js +58 -0
- package/lib/dependencies/RequireEnsureItemDependency.js +21 -0
- package/lib/dependencies/RequireEnsurePlugin.js +74 -0
- package/lib/dependencies/RequireHeaderDependency.js +26 -0
- package/lib/dependencies/RequireIncludeDependency.js +39 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +23 -0
- package/lib/dependencies/RequireIncludePlugin.js +61 -0
- package/lib/dependencies/RequireResolveContextDependency.js +23 -0
- package/lib/dependencies/RequireResolveDependency.js +22 -0
- package/lib/dependencies/RequireResolveDependencyParserPlugin.js +86 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +26 -0
- package/lib/dependencies/SingleEntryDependency.js +21 -0
- package/lib/dependencies/SystemPlugin.js +122 -0
- package/lib/dependencies/UnsupportedDependency.js +27 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +31 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +54 -0
- package/lib/dependencies/WebpackMissingModule.js +20 -0
- package/lib/dependencies/getFunctionExpression.js +52 -0
- package/lib/formatLocation.js +75 -0
- package/lib/logging/Logger.js +128 -0
- package/lib/logging/createConsoleLogger.js +210 -0
- package/lib/logging/runtime.js +36 -0
- package/lib/logging/truncateArgs.js +76 -0
- package/lib/node/NodeChunkTemplatePlugin.js +31 -0
- package/lib/node/NodeEnvironmentPlugin.js +44 -0
- package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +36 -0
- package/lib/node/NodeMainTemplate.runtime.js +32 -0
- package/lib/node/NodeMainTemplateAsync.runtime.js +50 -0
- package/lib/node/NodeMainTemplatePlugin.js +321 -0
- package/lib/node/NodeOutputFileSystem.js +22 -0
- package/lib/node/NodeSourcePlugin.js +141 -0
- package/lib/node/NodeTargetPlugin.js +19 -0
- package/lib/node/NodeTemplatePlugin.js +31 -0
- package/lib/node/NodeWatchFileSystem.js +109 -0
- package/lib/node/ReadFileCompileWasmTemplatePlugin.js +61 -0
- package/lib/node/nodeConsole.js +135 -0
- package/lib/optimize/AggressiveMergingPlugin.js +87 -0
- package/lib/optimize/AggressiveSplittingPlugin.js +294 -0
- package/lib/optimize/ChunkModuleIdRangePlugin.js +66 -0
- package/lib/optimize/ConcatenatedModule.js +1477 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +70 -0
- package/lib/optimize/FlagIncludedChunksPlugin.js +99 -0
- package/lib/optimize/LimitChunkCountPlugin.js +231 -0
- package/lib/optimize/MergeDuplicateChunksPlugin.js +78 -0
- package/lib/optimize/MinChunkSizePlugin.js +82 -0
- package/lib/optimize/MinMaxSizeWarning.js +29 -0
- package/lib/optimize/ModuleConcatenationPlugin.js +485 -0
- package/lib/optimize/NaturalChunkOrderPlugin.js +41 -0
- package/lib/optimize/OccurrenceChunkOrderPlugin.js +66 -0
- package/lib/optimize/OccurrenceModuleOrderPlugin.js +112 -0
- package/lib/optimize/OccurrenceOrderPlugin.js +135 -0
- package/lib/optimize/RemoveEmptyChunksPlugin.js +42 -0
- package/lib/optimize/RemoveParentModulesPlugin.js +127 -0
- package/lib/optimize/RuntimeChunkPlugin.js +41 -0
- package/lib/optimize/SideEffectsFlagPlugin.js +352 -0
- package/lib/optimize/SplitChunksPlugin.js +971 -0
- package/lib/performance/AssetsOverSizeLimitWarning.js +30 -0
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +30 -0
- package/lib/performance/NoAsyncChunksWarning.js +21 -0
- package/lib/performance/SizeLimitsPlugin.js +125 -0
- package/lib/util/LazyBucketSortedSet.js +235 -0
- package/lib/util/Queue.js +46 -0
- package/lib/util/Semaphore.js +53 -0
- package/lib/util/SetHelpers.js +48 -0
- package/lib/util/SortableSet.js +140 -0
- package/lib/util/StackedSetMap.js +142 -0
- package/lib/util/TrackingSet.js +35 -0
- package/lib/util/cachedMerge.js +35 -0
- package/lib/util/cleverMerge.js +77 -0
- package/lib/util/createHash.js +174 -0
- package/lib/util/deterministicGrouping.js +274 -0
- package/lib/util/hash/BatchedHash.js +71 -0
- package/lib/util/hash/md4.js +25 -0
- package/lib/util/hash/wasm-hash.js +174 -0
- package/lib/util/identifier.js +127 -0
- package/lib/util/objectToMap.js +16 -0
- package/lib/validateSchema.js +67 -0
- package/lib/wasm/UnsupportedWebAssemblyFeatureError.js +17 -0
- package/lib/wasm/WasmFinalizeExportsPlugin.js +69 -0
- package/lib/wasm/WasmMainTemplatePlugin.js +341 -0
- package/lib/wasm/WebAssemblyGenerator.js +458 -0
- package/lib/wasm/WebAssemblyInInitialChunkError.js +88 -0
- package/lib/wasm/WebAssemblyJavascriptGenerator.js +152 -0
- package/lib/wasm/WebAssemblyModulesPlugin.js +128 -0
- package/lib/wasm/WebAssemblyParser.js +175 -0
- package/lib/wasm/WebAssemblyUtils.js +59 -0
- package/lib/web/FetchCompileWasmTemplatePlugin.js +37 -0
- package/lib/web/JsonpChunkTemplatePlugin.js +71 -0
- package/lib/web/JsonpExportMainTemplatePlugin.js +50 -0
- package/lib/web/JsonpHotUpdateChunkTemplatePlugin.js +39 -0
- package/lib/web/JsonpMainTemplate.runtime.js +71 -0
- package/lib/web/JsonpMainTemplatePlugin.js +615 -0
- package/lib/web/JsonpTemplatePlugin.js +23 -0
- package/lib/web/WebEnvironmentPlugin.js +18 -0
- package/lib/webpack.js +206 -0
- package/lib/webpack.web.js +31 -0
- package/lib/webworker/WebWorkerChunkTemplatePlugin.js +35 -0
- package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +40 -0
- package/lib/webworker/WebWorkerMainTemplate.runtime.js +73 -0
- package/lib/webworker/WebWorkerMainTemplatePlugin.js +192 -0
- package/lib/webworker/WebWorkerTemplatePlugin.js +25 -0
- package/package.json +211 -0
- package/schemas/WebpackOptions.json +2285 -0
- package/schemas/ajv.absolutePath.js +57 -0
- package/schemas/plugins/BannerPlugin.json +101 -0
- package/schemas/plugins/DllPlugin.json +36 -0
- package/schemas/plugins/DllReferencePlugin.json +205 -0
- package/schemas/plugins/HashedModuleIdsPlugin.json +26 -0
- package/schemas/plugins/IgnorePlugin.json +37 -0
- package/schemas/plugins/LoaderOptionsPlugin.json +27 -0
- package/schemas/plugins/ProgressPlugin.json +52 -0
- package/schemas/plugins/SourceMapDevToolPlugin.json +185 -0
- package/schemas/plugins/WatchIgnorePlugin.json +18 -0
- package/schemas/plugins/debug/ProfilingPlugin.json +13 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.json +23 -0
- package/schemas/plugins/optimize/LimitChunkCountPlugin.json +16 -0
- package/schemas/plugins/optimize/MinChunkSizePlugin.json +12 -0
- package/schemas/plugins/optimize/OccurrenceOrderChunkIdsPlugin.json +11 -0
- package/schemas/plugins/optimize/OccurrenceOrderModuleIdsPlugin.json +11 -0
- package/web_modules/node-libs-browser.js +0 -0
package/lib/Compiler.js
ADDED
|
@@ -0,0 +1,735 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Tobias Koppers @sokra
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
const parseJson = require("json-parse-better-errors");
|
|
8
|
+
const asyncLib = require("neo-async");
|
|
9
|
+
const path = require("path");
|
|
10
|
+
const { Source } = require("webpack-sources");
|
|
11
|
+
const util = require("util");
|
|
12
|
+
const {
|
|
13
|
+
Tapable,
|
|
14
|
+
SyncHook,
|
|
15
|
+
SyncBailHook,
|
|
16
|
+
AsyncParallelHook,
|
|
17
|
+
AsyncSeriesHook
|
|
18
|
+
} = require("tapable");
|
|
19
|
+
|
|
20
|
+
const Compilation = require("./Compilation");
|
|
21
|
+
const Stats = require("./Stats");
|
|
22
|
+
const Watching = require("./Watching");
|
|
23
|
+
const NormalModuleFactory = require("./NormalModuleFactory");
|
|
24
|
+
const ContextModuleFactory = require("./ContextModuleFactory");
|
|
25
|
+
const ResolverFactory = require("./ResolverFactory");
|
|
26
|
+
|
|
27
|
+
const RequestShortener = require("./RequestShortener");
|
|
28
|
+
const { makePathsRelative } = require("./util/identifier");
|
|
29
|
+
const ConcurrentCompilationError = require("./ConcurrentCompilationError");
|
|
30
|
+
const { Logger } = require("./logging/Logger");
|
|
31
|
+
|
|
32
|
+
/** @typedef {import("../declarations/WebpackOptions").Entry} Entry */
|
|
33
|
+
/** @typedef {import("../declarations/WebpackOptions").WebpackOptions} WebpackOptions */
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @typedef {Object} CompilationParams
|
|
37
|
+
* @property {NormalModuleFactory} normalModuleFactory
|
|
38
|
+
* @property {ContextModuleFactory} contextModuleFactory
|
|
39
|
+
* @property {Set<string>} compilationDependencies
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
class Compiler extends Tapable {
|
|
43
|
+
constructor(context) {
|
|
44
|
+
super();
|
|
45
|
+
this.hooks = {
|
|
46
|
+
/** @type {SyncBailHook<Compilation>} */
|
|
47
|
+
shouldEmit: new SyncBailHook(["compilation"]),
|
|
48
|
+
/** @type {AsyncSeriesHook<Stats>} */
|
|
49
|
+
done: new AsyncSeriesHook(["stats"]),
|
|
50
|
+
/** @type {AsyncSeriesHook<>} */
|
|
51
|
+
additionalPass: new AsyncSeriesHook([]),
|
|
52
|
+
/** @type {AsyncSeriesHook<Compiler>} */
|
|
53
|
+
beforeRun: new AsyncSeriesHook(["compiler"]),
|
|
54
|
+
/** @type {AsyncSeriesHook<Compiler>} */
|
|
55
|
+
run: new AsyncSeriesHook(["compiler"]),
|
|
56
|
+
/** @type {AsyncSeriesHook<Compilation>} */
|
|
57
|
+
emit: new AsyncSeriesHook(["compilation"]),
|
|
58
|
+
/** @type {AsyncSeriesHook<string, Buffer>} */
|
|
59
|
+
assetEmitted: new AsyncSeriesHook(["file", "content"]),
|
|
60
|
+
/** @type {AsyncSeriesHook<Compilation>} */
|
|
61
|
+
afterEmit: new AsyncSeriesHook(["compilation"]),
|
|
62
|
+
|
|
63
|
+
/** @type {SyncHook<Compilation, CompilationParams>} */
|
|
64
|
+
thisCompilation: new SyncHook(["compilation", "params"]),
|
|
65
|
+
/** @type {SyncHook<Compilation, CompilationParams>} */
|
|
66
|
+
compilation: new SyncHook(["compilation", "params"]),
|
|
67
|
+
/** @type {SyncHook<NormalModuleFactory>} */
|
|
68
|
+
normalModuleFactory: new SyncHook(["normalModuleFactory"]),
|
|
69
|
+
/** @type {SyncHook<ContextModuleFactory>} */
|
|
70
|
+
contextModuleFactory: new SyncHook(["contextModulefactory"]),
|
|
71
|
+
|
|
72
|
+
/** @type {AsyncSeriesHook<CompilationParams>} */
|
|
73
|
+
beforeCompile: new AsyncSeriesHook(["params"]),
|
|
74
|
+
/** @type {SyncHook<CompilationParams>} */
|
|
75
|
+
compile: new SyncHook(["params"]),
|
|
76
|
+
/** @type {AsyncParallelHook<Compilation>} */
|
|
77
|
+
make: new AsyncParallelHook(["compilation"]),
|
|
78
|
+
/** @type {AsyncSeriesHook<Compilation>} */
|
|
79
|
+
afterCompile: new AsyncSeriesHook(["compilation"]),
|
|
80
|
+
|
|
81
|
+
/** @type {AsyncSeriesHook<Compiler>} */
|
|
82
|
+
watchRun: new AsyncSeriesHook(["compiler"]),
|
|
83
|
+
/** @type {SyncHook<Error>} */
|
|
84
|
+
failed: new SyncHook(["error"]),
|
|
85
|
+
/** @type {SyncHook<string, string>} */
|
|
86
|
+
invalid: new SyncHook(["filename", "changeTime"]),
|
|
87
|
+
/** @type {SyncHook} */
|
|
88
|
+
watchClose: new SyncHook([]),
|
|
89
|
+
|
|
90
|
+
/** @type {SyncBailHook<string, string, any[]>} */
|
|
91
|
+
infrastructureLog: new SyncBailHook(["origin", "type", "args"]),
|
|
92
|
+
|
|
93
|
+
// TODO the following hooks are weirdly located here
|
|
94
|
+
// TODO move them for webpack 5
|
|
95
|
+
/** @type {SyncHook} */
|
|
96
|
+
environment: new SyncHook([]),
|
|
97
|
+
/** @type {SyncHook} */
|
|
98
|
+
afterEnvironment: new SyncHook([]),
|
|
99
|
+
/** @type {SyncHook<Compiler>} */
|
|
100
|
+
afterPlugins: new SyncHook(["compiler"]),
|
|
101
|
+
/** @type {SyncHook<Compiler>} */
|
|
102
|
+
afterResolvers: new SyncHook(["compiler"]),
|
|
103
|
+
/** @type {SyncBailHook<string, Entry>} */
|
|
104
|
+
entryOption: new SyncBailHook(["context", "entry"])
|
|
105
|
+
};
|
|
106
|
+
// TODO webpack 5 remove this
|
|
107
|
+
this.hooks.infrastructurelog = this.hooks.infrastructureLog;
|
|
108
|
+
|
|
109
|
+
this._pluginCompat.tap("Compiler", options => {
|
|
110
|
+
switch (options.name) {
|
|
111
|
+
case "additional-pass":
|
|
112
|
+
case "before-run":
|
|
113
|
+
case "run":
|
|
114
|
+
case "emit":
|
|
115
|
+
case "after-emit":
|
|
116
|
+
case "before-compile":
|
|
117
|
+
case "make":
|
|
118
|
+
case "after-compile":
|
|
119
|
+
case "watch-run":
|
|
120
|
+
options.async = true;
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
/** @type {string=} */
|
|
126
|
+
this.name = undefined;
|
|
127
|
+
/** @type {Compilation=} */
|
|
128
|
+
this.parentCompilation = undefined;
|
|
129
|
+
/** @type {string} */
|
|
130
|
+
this.outputPath = "";
|
|
131
|
+
|
|
132
|
+
this.outputFileSystem = null;
|
|
133
|
+
this.inputFileSystem = null;
|
|
134
|
+
|
|
135
|
+
/** @type {string|null} */
|
|
136
|
+
this.recordsInputPath = null;
|
|
137
|
+
/** @type {string|null} */
|
|
138
|
+
this.recordsOutputPath = null;
|
|
139
|
+
this.records = {};
|
|
140
|
+
this.removedFiles = new Set();
|
|
141
|
+
/** @type {Map<string, number>} */
|
|
142
|
+
this.fileTimestamps = new Map();
|
|
143
|
+
/** @type {Map<string, number>} */
|
|
144
|
+
this.contextTimestamps = new Map();
|
|
145
|
+
/** @type {ResolverFactory} */
|
|
146
|
+
this.resolverFactory = new ResolverFactory();
|
|
147
|
+
|
|
148
|
+
this.infrastructureLogger = undefined;
|
|
149
|
+
|
|
150
|
+
// TODO remove in webpack 5
|
|
151
|
+
this.resolvers = {
|
|
152
|
+
normal: {
|
|
153
|
+
plugins: util.deprecate((hook, fn) => {
|
|
154
|
+
this.resolverFactory.plugin("resolver normal", resolver => {
|
|
155
|
+
resolver.plugin(hook, fn);
|
|
156
|
+
});
|
|
157
|
+
}, "webpack: Using compiler.resolvers.normal is deprecated.\n" + 'Use compiler.resolverFactory.plugin("resolver normal", resolver => {\n resolver.plugin(/* … */);\n}); instead.'),
|
|
158
|
+
apply: util.deprecate((...args) => {
|
|
159
|
+
this.resolverFactory.plugin("resolver normal", resolver => {
|
|
160
|
+
resolver.apply(...args);
|
|
161
|
+
});
|
|
162
|
+
}, "webpack: Using compiler.resolvers.normal is deprecated.\n" + 'Use compiler.resolverFactory.plugin("resolver normal", resolver => {\n resolver.apply(/* … */);\n}); instead.')
|
|
163
|
+
},
|
|
164
|
+
loader: {
|
|
165
|
+
plugins: util.deprecate((hook, fn) => {
|
|
166
|
+
this.resolverFactory.plugin("resolver loader", resolver => {
|
|
167
|
+
resolver.plugin(hook, fn);
|
|
168
|
+
});
|
|
169
|
+
}, "webpack: Using compiler.resolvers.loader is deprecated.\n" + 'Use compiler.resolverFactory.plugin("resolver loader", resolver => {\n resolver.plugin(/* … */);\n}); instead.'),
|
|
170
|
+
apply: util.deprecate((...args) => {
|
|
171
|
+
this.resolverFactory.plugin("resolver loader", resolver => {
|
|
172
|
+
resolver.apply(...args);
|
|
173
|
+
});
|
|
174
|
+
}, "webpack: Using compiler.resolvers.loader is deprecated.\n" + 'Use compiler.resolverFactory.plugin("resolver loader", resolver => {\n resolver.apply(/* … */);\n}); instead.')
|
|
175
|
+
},
|
|
176
|
+
context: {
|
|
177
|
+
plugins: util.deprecate((hook, fn) => {
|
|
178
|
+
this.resolverFactory.plugin("resolver context", resolver => {
|
|
179
|
+
resolver.plugin(hook, fn);
|
|
180
|
+
});
|
|
181
|
+
}, "webpack: Using compiler.resolvers.context is deprecated.\n" + 'Use compiler.resolverFactory.plugin("resolver context", resolver => {\n resolver.plugin(/* … */);\n}); instead.'),
|
|
182
|
+
apply: util.deprecate((...args) => {
|
|
183
|
+
this.resolverFactory.plugin("resolver context", resolver => {
|
|
184
|
+
resolver.apply(...args);
|
|
185
|
+
});
|
|
186
|
+
}, "webpack: Using compiler.resolvers.context is deprecated.\n" + 'Use compiler.resolverFactory.plugin("resolver context", resolver => {\n resolver.apply(/* … */);\n}); instead.')
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
/** @type {WebpackOptions} */
|
|
191
|
+
this.options = /** @type {WebpackOptions} */ ({});
|
|
192
|
+
|
|
193
|
+
this.context = context;
|
|
194
|
+
|
|
195
|
+
this.requestShortener = new RequestShortener(context);
|
|
196
|
+
|
|
197
|
+
/** @type {boolean} */
|
|
198
|
+
this.running = false;
|
|
199
|
+
|
|
200
|
+
/** @type {boolean} */
|
|
201
|
+
this.watchMode = false;
|
|
202
|
+
|
|
203
|
+
/** @private @type {WeakMap<Source, { sizeOnlySource: SizeOnlySource, writtenTo: Map<string, number> }>} */
|
|
204
|
+
this._assetEmittingSourceCache = new WeakMap();
|
|
205
|
+
/** @private @type {Map<string, number>} */
|
|
206
|
+
this._assetEmittingWrittenFiles = new Map();
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* @param {string | (function(): string)} name name of the logger, or function called once to get the logger name
|
|
211
|
+
* @returns {Logger} a logger with that name
|
|
212
|
+
*/
|
|
213
|
+
getInfrastructureLogger(name) {
|
|
214
|
+
if (!name) {
|
|
215
|
+
throw new TypeError(
|
|
216
|
+
"Compiler.getInfrastructureLogger(name) called without a name"
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
return new Logger((type, args) => {
|
|
220
|
+
if (typeof name === "function") {
|
|
221
|
+
name = name();
|
|
222
|
+
if (!name) {
|
|
223
|
+
throw new TypeError(
|
|
224
|
+
"Compiler.getInfrastructureLogger(name) called with a function not returning a name"
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
if (this.hooks.infrastructureLog.call(name, type, args) === undefined) {
|
|
229
|
+
if (this.infrastructureLogger !== undefined) {
|
|
230
|
+
this.infrastructureLogger(name, type, args);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
watch(watchOptions, handler) {
|
|
237
|
+
if (this.running) return handler(new ConcurrentCompilationError());
|
|
238
|
+
|
|
239
|
+
this.running = true;
|
|
240
|
+
this.watchMode = true;
|
|
241
|
+
this.fileTimestamps = new Map();
|
|
242
|
+
this.contextTimestamps = new Map();
|
|
243
|
+
this.removedFiles = new Set();
|
|
244
|
+
return new Watching(this, watchOptions, handler);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
run(callback) {
|
|
248
|
+
if (this.running) return callback(new ConcurrentCompilationError());
|
|
249
|
+
|
|
250
|
+
const finalCallback = (err, stats) => {
|
|
251
|
+
this.running = false;
|
|
252
|
+
|
|
253
|
+
if (err) {
|
|
254
|
+
this.hooks.failed.call(err);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
if (callback !== undefined) return callback(err, stats);
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
const startTime = Date.now();
|
|
261
|
+
|
|
262
|
+
this.running = true;
|
|
263
|
+
|
|
264
|
+
const onCompiled = (err, compilation) => {
|
|
265
|
+
if (err) return finalCallback(err);
|
|
266
|
+
|
|
267
|
+
if (this.hooks.shouldEmit.call(compilation) === false) {
|
|
268
|
+
const stats = new Stats(compilation);
|
|
269
|
+
stats.startTime = startTime;
|
|
270
|
+
stats.endTime = Date.now();
|
|
271
|
+
this.hooks.done.callAsync(stats, err => {
|
|
272
|
+
if (err) return finalCallback(err);
|
|
273
|
+
return finalCallback(null, stats);
|
|
274
|
+
});
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
this.emitAssets(compilation, err => {
|
|
279
|
+
if (err) return finalCallback(err);
|
|
280
|
+
|
|
281
|
+
if (compilation.hooks.needAdditionalPass.call()) {
|
|
282
|
+
compilation.needAdditionalPass = true;
|
|
283
|
+
|
|
284
|
+
const stats = new Stats(compilation);
|
|
285
|
+
stats.startTime = startTime;
|
|
286
|
+
stats.endTime = Date.now();
|
|
287
|
+
this.hooks.done.callAsync(stats, err => {
|
|
288
|
+
if (err) return finalCallback(err);
|
|
289
|
+
|
|
290
|
+
this.hooks.additionalPass.callAsync(err => {
|
|
291
|
+
if (err) return finalCallback(err);
|
|
292
|
+
this.compile(onCompiled);
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
this.emitRecords(err => {
|
|
299
|
+
if (err) return finalCallback(err);
|
|
300
|
+
|
|
301
|
+
const stats = new Stats(compilation);
|
|
302
|
+
stats.startTime = startTime;
|
|
303
|
+
stats.endTime = Date.now();
|
|
304
|
+
this.hooks.done.callAsync(stats, err => {
|
|
305
|
+
if (err) return finalCallback(err);
|
|
306
|
+
return finalCallback(null, stats);
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
this.hooks.beforeRun.callAsync(this, err => {
|
|
313
|
+
if (err) return finalCallback(err);
|
|
314
|
+
|
|
315
|
+
this.hooks.run.callAsync(this, err => {
|
|
316
|
+
if (err) return finalCallback(err);
|
|
317
|
+
|
|
318
|
+
this.readRecords(err => {
|
|
319
|
+
if (err) return finalCallback(err);
|
|
320
|
+
|
|
321
|
+
this.compile(onCompiled);
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
runAsChild(callback) {
|
|
328
|
+
this.compile((err, compilation) => {
|
|
329
|
+
if (err) return callback(err);
|
|
330
|
+
|
|
331
|
+
this.parentCompilation.children.push(compilation);
|
|
332
|
+
for (const { name, source, info } of compilation.getAssets()) {
|
|
333
|
+
this.parentCompilation.emitAsset(name, source, info);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
const entries = Array.from(
|
|
337
|
+
compilation.entrypoints.values(),
|
|
338
|
+
ep => ep.chunks
|
|
339
|
+
).reduce((array, chunks) => {
|
|
340
|
+
return array.concat(chunks);
|
|
341
|
+
}, []);
|
|
342
|
+
|
|
343
|
+
return callback(null, entries, compilation);
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
purgeInputFileSystem() {
|
|
348
|
+
if (this.inputFileSystem && this.inputFileSystem.purge) {
|
|
349
|
+
this.inputFileSystem.purge();
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
emitAssets(compilation, callback) {
|
|
354
|
+
let outputPath;
|
|
355
|
+
const emitFiles = err => {
|
|
356
|
+
if (err) return callback(err);
|
|
357
|
+
|
|
358
|
+
asyncLib.forEachLimit(
|
|
359
|
+
compilation.getAssets(),
|
|
360
|
+
15,
|
|
361
|
+
({ name: file, source }, callback) => {
|
|
362
|
+
let targetFile = file;
|
|
363
|
+
const queryStringIdx = targetFile.indexOf("?");
|
|
364
|
+
if (queryStringIdx >= 0) {
|
|
365
|
+
targetFile = targetFile.substr(0, queryStringIdx);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
const writeOut = err => {
|
|
369
|
+
if (err) return callback(err);
|
|
370
|
+
const targetPath = this.outputFileSystem.join(
|
|
371
|
+
outputPath,
|
|
372
|
+
targetFile
|
|
373
|
+
);
|
|
374
|
+
// TODO webpack 5 remove futureEmitAssets option and make it on by default
|
|
375
|
+
if (this.options.output.futureEmitAssets) {
|
|
376
|
+
// check if the target file has already been written by this Compiler
|
|
377
|
+
const targetFileGeneration = this._assetEmittingWrittenFiles.get(
|
|
378
|
+
targetPath
|
|
379
|
+
);
|
|
380
|
+
|
|
381
|
+
// create an cache entry for this Source if not already existing
|
|
382
|
+
let cacheEntry = this._assetEmittingSourceCache.get(source);
|
|
383
|
+
if (cacheEntry === undefined) {
|
|
384
|
+
cacheEntry = {
|
|
385
|
+
sizeOnlySource: undefined,
|
|
386
|
+
writtenTo: new Map()
|
|
387
|
+
};
|
|
388
|
+
this._assetEmittingSourceCache.set(source, cacheEntry);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// if the target file has already been written
|
|
392
|
+
if (targetFileGeneration !== undefined) {
|
|
393
|
+
// check if the Source has been written to this target file
|
|
394
|
+
const writtenGeneration = cacheEntry.writtenTo.get(targetPath);
|
|
395
|
+
if (writtenGeneration === targetFileGeneration) {
|
|
396
|
+
// if yes, we skip writing the file
|
|
397
|
+
// as it's already there
|
|
398
|
+
// (we assume one doesn't remove files while the Compiler is running)
|
|
399
|
+
|
|
400
|
+
compilation.updateAsset(file, cacheEntry.sizeOnlySource, {
|
|
401
|
+
size: cacheEntry.sizeOnlySource.size()
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
return callback();
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
// TODO webpack 5: if info.immutable check if file already exists in output
|
|
409
|
+
// skip emitting if it's already there
|
|
410
|
+
|
|
411
|
+
// get the binary (Buffer) content from the Source
|
|
412
|
+
/** @type {Buffer} */
|
|
413
|
+
let content;
|
|
414
|
+
if (typeof source.buffer === "function") {
|
|
415
|
+
content = source.buffer();
|
|
416
|
+
} else {
|
|
417
|
+
const bufferOrString = source.source();
|
|
418
|
+
if (Buffer.isBuffer(bufferOrString)) {
|
|
419
|
+
content = bufferOrString;
|
|
420
|
+
} else {
|
|
421
|
+
content = Buffer.from(bufferOrString, "utf8");
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// Create a replacement resource which only allows to ask for size
|
|
426
|
+
// This allows to GC all memory allocated by the Source
|
|
427
|
+
// (expect when the Source is stored in any other cache)
|
|
428
|
+
cacheEntry.sizeOnlySource = new SizeOnlySource(content.length);
|
|
429
|
+
compilation.updateAsset(file, cacheEntry.sizeOnlySource, {
|
|
430
|
+
size: content.length
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
// Write the file to output file system
|
|
434
|
+
this.outputFileSystem.writeFile(targetPath, content, err => {
|
|
435
|
+
if (err) return callback(err);
|
|
436
|
+
|
|
437
|
+
// information marker that the asset has been emitted
|
|
438
|
+
compilation.emittedAssets.add(file);
|
|
439
|
+
|
|
440
|
+
// cache the information that the Source has been written to that location
|
|
441
|
+
const newGeneration =
|
|
442
|
+
targetFileGeneration === undefined
|
|
443
|
+
? 1
|
|
444
|
+
: targetFileGeneration + 1;
|
|
445
|
+
cacheEntry.writtenTo.set(targetPath, newGeneration);
|
|
446
|
+
this._assetEmittingWrittenFiles.set(targetPath, newGeneration);
|
|
447
|
+
this.hooks.assetEmitted.callAsync(file, content, callback);
|
|
448
|
+
});
|
|
449
|
+
} else {
|
|
450
|
+
if (source.existsAt === targetPath) {
|
|
451
|
+
source.emitted = false;
|
|
452
|
+
return callback();
|
|
453
|
+
}
|
|
454
|
+
let content = source.source();
|
|
455
|
+
|
|
456
|
+
if (!Buffer.isBuffer(content)) {
|
|
457
|
+
content = Buffer.from(content, "utf8");
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
source.existsAt = targetPath;
|
|
461
|
+
source.emitted = true;
|
|
462
|
+
this.outputFileSystem.writeFile(targetPath, content, err => {
|
|
463
|
+
if (err) return callback(err);
|
|
464
|
+
this.hooks.assetEmitted.callAsync(file, content, callback);
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
};
|
|
468
|
+
|
|
469
|
+
if (targetFile.match(/\/|\\/)) {
|
|
470
|
+
const dir = path.dirname(targetFile);
|
|
471
|
+
this.outputFileSystem.mkdirp(
|
|
472
|
+
this.outputFileSystem.join(outputPath, dir),
|
|
473
|
+
writeOut
|
|
474
|
+
);
|
|
475
|
+
} else {
|
|
476
|
+
writeOut();
|
|
477
|
+
}
|
|
478
|
+
},
|
|
479
|
+
err => {
|
|
480
|
+
if (err) return callback(err);
|
|
481
|
+
|
|
482
|
+
this.hooks.afterEmit.callAsync(compilation, err => {
|
|
483
|
+
if (err) return callback(err);
|
|
484
|
+
|
|
485
|
+
return callback();
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
);
|
|
489
|
+
};
|
|
490
|
+
|
|
491
|
+
this.hooks.emit.callAsync(compilation, err => {
|
|
492
|
+
if (err) return callback(err);
|
|
493
|
+
outputPath = compilation.getPath(this.outputPath);
|
|
494
|
+
this.outputFileSystem.mkdirp(outputPath, emitFiles);
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
emitRecords(callback) {
|
|
499
|
+
if (!this.recordsOutputPath) return callback();
|
|
500
|
+
const idx1 = this.recordsOutputPath.lastIndexOf("/");
|
|
501
|
+
const idx2 = this.recordsOutputPath.lastIndexOf("\\");
|
|
502
|
+
let recordsOutputPathDirectory = null;
|
|
503
|
+
if (idx1 > idx2) {
|
|
504
|
+
recordsOutputPathDirectory = this.recordsOutputPath.substr(0, idx1);
|
|
505
|
+
} else if (idx1 < idx2) {
|
|
506
|
+
recordsOutputPathDirectory = this.recordsOutputPath.substr(0, idx2);
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
const writeFile = () => {
|
|
510
|
+
this.outputFileSystem.writeFile(
|
|
511
|
+
this.recordsOutputPath,
|
|
512
|
+
JSON.stringify(this.records, undefined, 2),
|
|
513
|
+
callback
|
|
514
|
+
);
|
|
515
|
+
};
|
|
516
|
+
|
|
517
|
+
if (!recordsOutputPathDirectory) {
|
|
518
|
+
return writeFile();
|
|
519
|
+
}
|
|
520
|
+
this.outputFileSystem.mkdirp(recordsOutputPathDirectory, err => {
|
|
521
|
+
if (err) return callback(err);
|
|
522
|
+
writeFile();
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
readRecords(callback) {
|
|
527
|
+
if (!this.recordsInputPath) {
|
|
528
|
+
this.records = {};
|
|
529
|
+
return callback();
|
|
530
|
+
}
|
|
531
|
+
this.inputFileSystem.stat(this.recordsInputPath, err => {
|
|
532
|
+
// It doesn't exist
|
|
533
|
+
// We can ignore this.
|
|
534
|
+
if (err) return callback();
|
|
535
|
+
|
|
536
|
+
this.inputFileSystem.readFile(this.recordsInputPath, (err, content) => {
|
|
537
|
+
if (err) return callback(err);
|
|
538
|
+
|
|
539
|
+
try {
|
|
540
|
+
this.records = parseJson(content.toString("utf-8"));
|
|
541
|
+
} catch (e) {
|
|
542
|
+
e.message = "Cannot parse records: " + e.message;
|
|
543
|
+
return callback(e);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
return callback();
|
|
547
|
+
});
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
createChildCompiler(
|
|
552
|
+
compilation,
|
|
553
|
+
compilerName,
|
|
554
|
+
compilerIndex,
|
|
555
|
+
outputOptions,
|
|
556
|
+
plugins
|
|
557
|
+
) {
|
|
558
|
+
const childCompiler = new Compiler(this.context);
|
|
559
|
+
if (Array.isArray(plugins)) {
|
|
560
|
+
for (const plugin of plugins) {
|
|
561
|
+
plugin.apply(childCompiler);
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
for (const name in this.hooks) {
|
|
565
|
+
if (
|
|
566
|
+
![
|
|
567
|
+
"make",
|
|
568
|
+
"compile",
|
|
569
|
+
"emit",
|
|
570
|
+
"afterEmit",
|
|
571
|
+
"invalid",
|
|
572
|
+
"done",
|
|
573
|
+
"thisCompilation"
|
|
574
|
+
].includes(name)
|
|
575
|
+
) {
|
|
576
|
+
if (childCompiler.hooks[name]) {
|
|
577
|
+
childCompiler.hooks[name].taps = this.hooks[name].taps.slice();
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
childCompiler.name = compilerName;
|
|
582
|
+
childCompiler.outputPath = this.outputPath;
|
|
583
|
+
childCompiler.inputFileSystem = this.inputFileSystem;
|
|
584
|
+
childCompiler.outputFileSystem = null;
|
|
585
|
+
childCompiler.resolverFactory = this.resolverFactory;
|
|
586
|
+
childCompiler.fileTimestamps = this.fileTimestamps;
|
|
587
|
+
childCompiler.contextTimestamps = this.contextTimestamps;
|
|
588
|
+
|
|
589
|
+
const relativeCompilerName = makePathsRelative(this.context, compilerName);
|
|
590
|
+
if (!this.records[relativeCompilerName]) {
|
|
591
|
+
this.records[relativeCompilerName] = [];
|
|
592
|
+
}
|
|
593
|
+
if (this.records[relativeCompilerName][compilerIndex]) {
|
|
594
|
+
childCompiler.records = this.records[relativeCompilerName][compilerIndex];
|
|
595
|
+
} else {
|
|
596
|
+
this.records[relativeCompilerName].push((childCompiler.records = {}));
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
childCompiler.options = Object.create(this.options);
|
|
600
|
+
childCompiler.options.output = Object.create(childCompiler.options.output);
|
|
601
|
+
for (const name in outputOptions) {
|
|
602
|
+
childCompiler.options.output[name] = outputOptions[name];
|
|
603
|
+
}
|
|
604
|
+
childCompiler.parentCompilation = compilation;
|
|
605
|
+
|
|
606
|
+
compilation.hooks.childCompiler.call(
|
|
607
|
+
childCompiler,
|
|
608
|
+
compilerName,
|
|
609
|
+
compilerIndex
|
|
610
|
+
);
|
|
611
|
+
|
|
612
|
+
return childCompiler;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
isChild() {
|
|
616
|
+
return !!this.parentCompilation;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
createCompilation() {
|
|
620
|
+
return new Compilation(this);
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
newCompilation(params) {
|
|
624
|
+
const compilation = this.createCompilation();
|
|
625
|
+
compilation.fileTimestamps = this.fileTimestamps;
|
|
626
|
+
compilation.contextTimestamps = this.contextTimestamps;
|
|
627
|
+
compilation.name = this.name;
|
|
628
|
+
compilation.records = this.records;
|
|
629
|
+
compilation.compilationDependencies = params.compilationDependencies;
|
|
630
|
+
this.hooks.thisCompilation.call(compilation, params);
|
|
631
|
+
this.hooks.compilation.call(compilation, params);
|
|
632
|
+
return compilation;
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
createNormalModuleFactory() {
|
|
636
|
+
const normalModuleFactory = new NormalModuleFactory(
|
|
637
|
+
this.options.context,
|
|
638
|
+
this.resolverFactory,
|
|
639
|
+
this.options.module || {}
|
|
640
|
+
);
|
|
641
|
+
this.hooks.normalModuleFactory.call(normalModuleFactory);
|
|
642
|
+
return normalModuleFactory;
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
createContextModuleFactory() {
|
|
646
|
+
const contextModuleFactory = new ContextModuleFactory(this.resolverFactory);
|
|
647
|
+
this.hooks.contextModuleFactory.call(contextModuleFactory);
|
|
648
|
+
return contextModuleFactory;
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
newCompilationParams() {
|
|
652
|
+
const params = {
|
|
653
|
+
normalModuleFactory: this.createNormalModuleFactory(),
|
|
654
|
+
contextModuleFactory: this.createContextModuleFactory(),
|
|
655
|
+
compilationDependencies: new Set()
|
|
656
|
+
};
|
|
657
|
+
return params;
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
compile(callback) {
|
|
661
|
+
const params = this.newCompilationParams();
|
|
662
|
+
this.hooks.beforeCompile.callAsync(params, err => {
|
|
663
|
+
if (err) return callback(err);
|
|
664
|
+
|
|
665
|
+
this.hooks.compile.call(params);
|
|
666
|
+
|
|
667
|
+
const compilation = this.newCompilation(params);
|
|
668
|
+
|
|
669
|
+
this.hooks.make.callAsync(compilation, err => {
|
|
670
|
+
if (err) return callback(err);
|
|
671
|
+
|
|
672
|
+
compilation.finish(err => {
|
|
673
|
+
if (err) return callback(err);
|
|
674
|
+
|
|
675
|
+
compilation.seal(err => {
|
|
676
|
+
if (err) return callback(err);
|
|
677
|
+
|
|
678
|
+
this.hooks.afterCompile.callAsync(compilation, err => {
|
|
679
|
+
if (err) return callback(err);
|
|
680
|
+
|
|
681
|
+
return callback(null, compilation);
|
|
682
|
+
});
|
|
683
|
+
});
|
|
684
|
+
});
|
|
685
|
+
});
|
|
686
|
+
});
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
module.exports = Compiler;
|
|
691
|
+
|
|
692
|
+
class SizeOnlySource extends Source {
|
|
693
|
+
constructor(size) {
|
|
694
|
+
super();
|
|
695
|
+
this._size = size;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
_error() {
|
|
699
|
+
return new Error(
|
|
700
|
+
"Content and Map of this Source is no longer available (only size() is supported)"
|
|
701
|
+
);
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
size() {
|
|
705
|
+
return this._size;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
/**
|
|
709
|
+
* @param {any} options options
|
|
710
|
+
* @returns {string} the source
|
|
711
|
+
*/
|
|
712
|
+
source(options) {
|
|
713
|
+
throw this._error();
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
node() {
|
|
717
|
+
throw this._error();
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
listMap() {
|
|
721
|
+
throw this._error();
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
map() {
|
|
725
|
+
throw this._error();
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
listNode() {
|
|
729
|
+
throw this._error();
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
updateHash() {
|
|
733
|
+
throw this._error();
|
|
734
|
+
}
|
|
735
|
+
}
|