webpack 4.15.0 → 4.16.2
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 -20
- package/README.md +761 -758
- package/SECURITY.md +9 -9
- package/buildin/amd-define.js +3 -3
- package/buildin/amd-options.js +2 -2
- package/buildin/global.js +20 -20
- package/buildin/harmony-module.js +24 -24
- package/buildin/module.js +22 -22
- package/buildin/system.js +7 -7
- package/hot/dev-server.js +61 -61
- package/hot/emitter.js +2 -2
- package/hot/log-apply-result.js +44 -44
- package/hot/log.js +45 -45
- package/hot/only-dev-server.js +105 -105
- package/hot/poll.js +40 -37
- package/hot/signal.js +62 -62
- package/lib/APIPlugin.js +84 -84
- package/lib/AmdMainTemplatePlugin.js +87 -87
- package/lib/AsyncDependencyToInitialChunkError.js +31 -31
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/BannerPlugin.js +117 -117
- package/lib/BasicEvaluatedExpression.js +211 -211
- package/lib/CachePlugin.js +102 -102
- package/lib/CaseSensitiveModulesWarning.js +67 -67
- package/lib/Chunk.js +833 -811
- package/lib/ChunkGroup.js +4 -4
- package/lib/ChunkRenderError.js +32 -32
- package/lib/CommentCompilationWarning.js +2 -2
- package/lib/CompatibilityPlugin.js +70 -70
- package/lib/Compilation.js +46 -15
- package/lib/ConcurrentCompilationError.js +19 -19
- package/lib/ConstPlugin.js +258 -258
- package/lib/ContextExclusionPlugin.js +28 -17
- package/lib/ContextModule.js +844 -739
- package/lib/ContextModuleFactory.js +262 -256
- package/lib/ContextReplacementPlugin.js +133 -133
- package/lib/DefinePlugin.js +49 -0
- package/lib/DelegatedModule.js +5 -0
- package/lib/DelegatedModuleFactoryPlugin.js +95 -89
- package/lib/DelegatedPlugin.js +39 -39
- package/lib/DependenciesBlock.js +1 -1
- package/lib/Dependency.js +10 -4
- package/lib/DllModule.js +60 -54
- package/lib/DllModuleFactory.js +29 -29
- package/lib/DllPlugin.js +44 -44
- package/lib/DllReferencePlugin.js +132 -84
- package/lib/EntryModuleNotFoundError.js +21 -21
- package/lib/Entrypoint.js +54 -54
- package/lib/EnvironmentPlugin.js +72 -65
- package/lib/ErrorHelpers.js +60 -60
- package/lib/EvalDevToolModulePlugin.js +27 -27
- package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +115 -115
- package/lib/EvalSourceMapDevToolPlugin.js +41 -41
- package/lib/ExportPropertyMainTemplatePlugin.js +53 -53
- package/lib/ExternalModule.js +165 -159
- package/lib/ExternalsPlugin.js +23 -23
- package/lib/FlagDependencyExportsPlugin.js +146 -146
- package/lib/FlagInitialModulesAsUsedPlugin.js +36 -36
- package/lib/FunctionModuleTemplatePlugin.js +100 -100
- package/lib/Generator.js +60 -52
- package/lib/HarmonyLinkingError.js +17 -17
- package/lib/HashedModuleIdsPlugin.js +53 -53
- package/lib/HotModuleReplacementPlugin.js +411 -413
- package/lib/IgnorePlugin.js +90 -90
- package/lib/JavascriptGenerator.js +229 -229
- package/lib/JavascriptModulesPlugin.js +179 -179
- package/lib/JsonGenerator.js +55 -55
- package/lib/JsonModulesPlugin.js +30 -30
- package/lib/JsonParser.js +27 -27
- package/lib/LibManifestPlugin.js +86 -86
- package/lib/LibraryTemplatePlugin.js +153 -153
- package/lib/LoaderOptionsPlugin.js +53 -53
- package/lib/LoaderTargetPlugin.js +24 -24
- package/lib/MemoryOutputFileSystem.js +5 -5
- package/lib/Module.js +431 -391
- package/lib/ModuleBuildError.js +52 -52
- package/lib/ModuleDependencyError.js +35 -35
- package/lib/ModuleDependencyWarning.js +25 -25
- package/lib/ModuleError.js +36 -36
- package/lib/ModuleFilenameHelpers.js +178 -178
- package/lib/ModuleNotFoundError.js +23 -23
- package/lib/ModuleParseError.js +57 -57
- package/lib/ModuleTemplate.js +93 -93
- package/lib/ModuleWarning.js +36 -36
- package/lib/MultiCompiler.js +283 -283
- package/lib/MultiModule.js +87 -81
- package/lib/MultiModuleFactory.js +23 -23
- package/lib/MultiStats.js +92 -92
- package/lib/MultiWatching.js +38 -38
- package/lib/NamedChunksPlugin.js +29 -29
- package/lib/NamedModulesPlugin.js +57 -57
- package/lib/NoEmitOnErrorsPlugin.js +20 -20
- package/lib/NoModeWarning.js +23 -23
- package/lib/NodeStuffPlugin.js +197 -179
- package/lib/NormalModule.js +542 -536
- package/lib/NormalModuleFactory.js +526 -526
- package/lib/NormalModuleReplacementPlugin.js +51 -51
- package/lib/NullFactory.js +12 -12
- package/lib/OptionsApply.js +10 -10
- package/lib/OptionsDefaulter.js +84 -84
- package/lib/Parser.js +2202 -2193
- package/lib/ParserHelpers.js +103 -103
- package/lib/PrefetchPlugin.js +37 -37
- package/lib/ProgressPlugin.js +246 -246
- package/lib/ProvidePlugin.js +86 -86
- package/lib/RawModule.js +56 -56
- package/lib/RecordIdsPlugin.js +230 -230
- package/lib/RemovedPluginError.js +11 -11
- package/lib/RequestShortener.js +83 -83
- package/lib/RequireJsStuffPlugin.js +69 -69
- package/lib/ResolverFactory.js +64 -64
- package/lib/RuntimeTemplate.js +12 -0
- package/lib/SetVarMainTemplatePlugin.js +69 -69
- package/lib/SingleEntryPlugin.js +6 -1
- package/lib/SizeFormatHelpers.js +24 -24
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +49 -49
- package/lib/SourceMapDevToolPlugin.js +301 -301
- package/lib/Stats.js +28 -5
- package/lib/TemplatedPathPlugin.js +173 -173
- package/lib/UnsupportedFeatureWarning.js +22 -22
- package/lib/UseStrictPlugin.js +54 -54
- package/lib/WarnCaseSensitiveModulesPlugin.js +37 -37
- package/lib/WarnNoModeSetPlugin.js +17 -17
- package/lib/WatchIgnorePlugin.js +100 -100
- package/lib/Watching.js +194 -194
- package/lib/WebpackOptionsApply.js +92 -10
- package/lib/WebpackOptionsDefaulter.js +368 -354
- package/lib/debug/ProfilingPlugin.js +430 -430
- package/lib/dependencies/AMDPlugin.js +250 -250
- package/lib/dependencies/AMDRequireArrayDependency.js +49 -49
- package/lib/dependencies/AMDRequireContextDependency.js +20 -20
- package/lib/dependencies/AMDRequireDependency.js +135 -135
- package/lib/dependencies/AMDRequireItemDependency.js +22 -22
- package/lib/dependencies/CommonJsPlugin.js +161 -161
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -23
- package/lib/dependencies/CommonJsRequireDependency.js +22 -22
- package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +6 -0
- package/lib/dependencies/ConstDependency.js +33 -33
- package/lib/dependencies/ContextDependency.js +68 -68
- package/lib/dependencies/ContextDependencyHelpers.js +142 -142
- package/lib/dependencies/ContextDependencyTemplateAsId.js +42 -42
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +38 -38
- package/lib/dependencies/ContextElementDependency.js +21 -21
- package/lib/dependencies/CriticalDependencyWarning.js +20 -20
- package/lib/dependencies/DelegatedSourceDependency.js +18 -18
- package/lib/dependencies/DllEntryDependency.js +20 -20
- package/lib/dependencies/HarmonyAcceptDependency.js +45 -45
- package/lib/dependencies/HarmonyCompatibilityDependency.js +31 -31
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +92 -92
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +139 -139
- package/lib/dependencies/HarmonyExportHeaderDependency.js +30 -30
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +2 -1
- package/lib/dependencies/HarmonyImportDependency.js +109 -109
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +222 -222
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +31 -31
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +167 -167
- package/lib/dependencies/HarmonyInitDependency.js +60 -60
- package/lib/dependencies/HarmonyModulesPlugin.js +146 -146
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +26 -26
- package/lib/dependencies/ImportContextDependency.js +23 -23
- package/lib/dependencies/ImportDependenciesBlock.js +18 -18
- package/lib/dependencies/ImportDependency.js +34 -34
- package/lib/dependencies/ImportEagerDependency.js +32 -32
- package/lib/dependencies/ImportParserPlugin.js +263 -263
- package/lib/dependencies/ImportPlugin.js +82 -82
- package/lib/dependencies/ImportWeakDependency.js +34 -34
- package/lib/dependencies/LoaderPlugin.js +18 -1
- package/lib/dependencies/LocalModule.js +23 -23
- package/lib/dependencies/LocalModulesHelpers.js +52 -52
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +17 -17
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +17 -17
- package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
- package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
- package/lib/dependencies/NullDependency.js +20 -20
- package/lib/dependencies/PrefetchDependency.js +18 -18
- package/lib/dependencies/RequireContextDependency.js +22 -22
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +56 -56
- package/lib/dependencies/RequireContextPlugin.js +143 -143
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +33 -33
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +116 -116
- package/lib/dependencies/RequireEnsureDependency.js +58 -58
- package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
- package/lib/dependencies/RequireEnsurePlugin.js +74 -74
- package/lib/dependencies/RequireHeaderDependency.js +26 -26
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +23 -23
- package/lib/dependencies/RequireIncludePlugin.js +61 -61
- package/lib/dependencies/RequireResolveContextDependency.js +23 -23
- package/lib/dependencies/RequireResolveDependency.js +22 -22
- package/lib/dependencies/RequireResolveDependencyParserPlugin.js +85 -85
- package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
- package/lib/dependencies/SystemPlugin.js +125 -125
- package/lib/dependencies/UnsupportedDependency.js +27 -27
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +29 -29
- package/lib/dependencies/WebAssemblyImportDependency.js +48 -48
- package/lib/dependencies/WebpackMissingModule.js +20 -20
- package/lib/formatLocation.js +75 -61
- package/lib/node/NodeChunkTemplatePlugin.js +31 -31
- package/lib/node/NodeEnvironmentPlugin.js +28 -28
- package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +36 -36
- package/lib/node/NodeMainTemplate.runtime.js +27 -27
- package/lib/node/NodeMainTemplatePlugin.js +323 -323
- package/lib/node/NodeOutputFileSystem.js +22 -22
- package/lib/node/NodeSourcePlugin.js +144 -144
- package/lib/node/NodeTargetPlugin.js +18 -18
- package/lib/node/NodeTemplatePlugin.js +31 -31
- package/lib/node/NodeWatchFileSystem.js +99 -99
- package/lib/node/ReadFileCompileWasmTemplatePlugin.js +61 -61
- package/lib/optimize/AggressiveMergingPlugin.js +87 -87
- package/lib/optimize/AggressiveSplittingPlugin.js +287 -287
- package/lib/optimize/ConcatenatedModule.js +5 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +70 -70
- package/lib/optimize/FlagIncludedChunksPlugin.js +99 -99
- package/lib/optimize/LimitChunkCountPlugin.js +66 -66
- package/lib/optimize/MergeDuplicateChunksPlugin.js +78 -78
- package/lib/optimize/MinChunkSizePlugin.js +77 -77
- package/lib/optimize/NaturalChunkOrderPlugin.js +41 -0
- package/lib/optimize/OccurrenceChunkOrderPlugin.js +61 -0
- package/lib/optimize/OccurrenceModuleOrderPlugin.js +103 -0
- package/lib/optimize/OccurrenceOrderPlugin.js +135 -133
- package/lib/optimize/RemoveEmptyChunksPlugin.js +42 -42
- package/lib/optimize/RemoveParentModulesPlugin.js +127 -127
- package/lib/optimize/RuntimeChunkPlugin.js +41 -41
- package/lib/optimize/SideEffectsFlagPlugin.js +168 -168
- package/lib/optimize/SplitChunksPlugin.js +866 -850
- package/lib/performance/AssetsOverSizeLimitWarning.js +30 -30
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +30 -30
- package/lib/performance/NoAsyncChunksWarning.js +21 -21
- package/lib/performance/SizeLimitsPlugin.js +105 -105
- package/lib/util/SortableSet.js +1 -0
- package/lib/util/StackedSetMap.js +144 -135
- package/lib/util/TrackingSet.js +35 -35
- package/lib/util/cachedMerge.js +35 -35
- package/lib/util/deterministicGrouping.js +251 -251
- package/lib/util/identifier.js +103 -103
- package/lib/util/objectToMap.js +16 -16
- package/lib/validateSchema.js +67 -67
- package/lib/wasm/UnsupportedWebAssemblyFeatureError.js +17 -17
- package/lib/wasm/WasmFinalizeExportsPlugin.js +1 -1
- package/lib/wasm/WebAssemblyGenerator.js +16 -2
- package/lib/wasm/WebAssemblyJavascriptGenerator.js +147 -133
- package/lib/wasm/WebAssemblyParser.js +174 -174
- package/lib/wasm/WebAssemblyUtils.js +59 -59
- package/lib/web/FetchCompileWasmTemplatePlugin.js +37 -37
- package/lib/web/JsonpExportMainTemplatePlugin.js +47 -47
- package/lib/web/JsonpHotUpdateChunkTemplatePlugin.js +39 -39
- package/lib/web/JsonpMainTemplate.runtime.js +65 -65
- package/lib/web/JsonpMainTemplatePlugin.js +1 -1
- package/lib/web/JsonpTemplatePlugin.js +23 -23
- package/lib/web/WebEnvironmentPlugin.js +18 -18
- package/lib/webpack.js +5 -0
- package/lib/webworker/WebWorkerChunkTemplatePlugin.js +35 -35
- package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +40 -40
- package/lib/webworker/WebWorkerMainTemplate.runtime.js +65 -65
- package/lib/webworker/WebWorkerMainTemplatePlugin.js +196 -196
- package/lib/webworker/WebWorkerTemplatePlugin.js +25 -25
- package/package.json +22 -13
- package/schemas/WebpackOptions.json +2062 -2036
- package/schemas/ajv.absolutePath.js +55 -55
- package/schemas/plugins/BannerPlugin.json +96 -96
- package/schemas/plugins/DllPlugin.json +32 -32
- package/schemas/plugins/DllReferencePlugin.json +99 -99
- package/schemas/plugins/HashedModuleIdsPlugin.json +24 -24
- package/schemas/plugins/LoaderOptionsPlugin.json +26 -26
- package/schemas/plugins/SourceMapDevToolPlugin.json +187 -187
- package/schemas/plugins/WatchIgnorePlugin.json +16 -16
- package/schemas/plugins/debug/ProfilingPlugin.json +12 -12
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.json +22 -22
- package/schemas/plugins/optimize/LimitChunkCountPlugin.json +15 -15
- package/schemas/plugins/optimize/MinChunkSizePlugin.json +13 -13
- package/schemas/plugins/optimize/OccurrenceOrderChunkIdsPlugin.json +10 -0
- package/schemas/plugins/optimize/OccurrenceOrderModuleIdsPlugin.json +10 -0
@@ -1,301 +1,301 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const path = require("path");
|
8
|
-
const { ConcatSource, RawSource } = require("webpack-sources");
|
9
|
-
const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
|
10
|
-
const SourceMapDevToolModuleOptionsPlugin = require("./SourceMapDevToolModuleOptionsPlugin");
|
11
|
-
const createHash = require("./util/createHash");
|
12
|
-
|
13
|
-
const validateOptions = require("schema-utils");
|
14
|
-
const schema = require("../schemas/plugins/SourceMapDevToolPlugin.json");
|
15
|
-
|
16
|
-
const basename = name => {
|
17
|
-
if (!name.includes("/")) return name;
|
18
|
-
return name.substr(name.lastIndexOf("/") + 1);
|
19
|
-
};
|
20
|
-
|
21
|
-
const assetsCache = new WeakMap();
|
22
|
-
|
23
|
-
const getTaskForFile = (file, chunk, options, compilation) => {
|
24
|
-
const asset = compilation.assets[file];
|
25
|
-
const cache = assetsCache.get(asset);
|
26
|
-
if (cache && cache.file === file) {
|
27
|
-
for (const cachedFile in cache.assets) {
|
28
|
-
compilation.assets[cachedFile] = cache.assets[cachedFile];
|
29
|
-
if (cachedFile !== file) chunk.files.push(cachedFile);
|
30
|
-
}
|
31
|
-
return;
|
32
|
-
}
|
33
|
-
let source, sourceMap;
|
34
|
-
if (asset.sourceAndMap) {
|
35
|
-
const sourceAndMap = asset.sourceAndMap(options);
|
36
|
-
sourceMap = sourceAndMap.map;
|
37
|
-
source = sourceAndMap.source;
|
38
|
-
} else {
|
39
|
-
sourceMap = asset.map(options);
|
40
|
-
source = asset.source();
|
41
|
-
}
|
42
|
-
if (sourceMap) {
|
43
|
-
return {
|
44
|
-
chunk,
|
45
|
-
file,
|
46
|
-
asset,
|
47
|
-
source,
|
48
|
-
sourceMap,
|
49
|
-
modules: undefined
|
50
|
-
};
|
51
|
-
}
|
52
|
-
};
|
53
|
-
|
54
|
-
class SourceMapDevToolPlugin {
|
55
|
-
constructor(options) {
|
56
|
-
if (arguments.length > 1) {
|
57
|
-
throw new Error(
|
58
|
-
"SourceMapDevToolPlugin only takes one argument (pass an options object)"
|
59
|
-
);
|
60
|
-
}
|
61
|
-
|
62
|
-
validateOptions(schema, options || {}, "SourceMap DevTool Plugin");
|
63
|
-
|
64
|
-
if (!options) options = {};
|
65
|
-
this.sourceMapFilename = options.filename;
|
66
|
-
this.sourceMappingURLComment =
|
67
|
-
options.append === false
|
68
|
-
? false
|
69
|
-
: options.append || "\n//# sourceMappingURL=[url]";
|
70
|
-
this.moduleFilenameTemplate =
|
71
|
-
options.moduleFilenameTemplate || "webpack://[namespace]/[resourcePath]";
|
72
|
-
this.fallbackModuleFilenameTemplate =
|
73
|
-
options.fallbackModuleFilenameTemplate ||
|
74
|
-
"webpack://[namespace]/[resourcePath]?[hash]";
|
75
|
-
this.namespace = options.namespace || "";
|
76
|
-
this.options = options;
|
77
|
-
}
|
78
|
-
|
79
|
-
apply(compiler) {
|
80
|
-
const sourceMapFilename = this.sourceMapFilename;
|
81
|
-
const sourceMappingURLComment = this.sourceMappingURLComment;
|
82
|
-
const moduleFilenameTemplate = this.moduleFilenameTemplate;
|
83
|
-
const namespace = this.namespace;
|
84
|
-
const fallbackModuleFilenameTemplate = this.fallbackModuleFilenameTemplate;
|
85
|
-
const requestShortener = compiler.requestShortener;
|
86
|
-
const options = this.options;
|
87
|
-
options.test = options.test || /\.(js|css)($|\?)/i;
|
88
|
-
|
89
|
-
const matchObject = ModuleFilenameHelpers.matchObject.bind(
|
90
|
-
undefined,
|
91
|
-
options
|
92
|
-
);
|
93
|
-
|
94
|
-
compiler.hooks.compilation.tap("SourceMapDevToolPlugin", compilation => {
|
95
|
-
new SourceMapDevToolModuleOptionsPlugin(options).apply(compilation);
|
96
|
-
|
97
|
-
compilation.hooks.afterOptimizeChunkAssets.tap(
|
98
|
-
{
|
99
|
-
name: "SourceMapDevToolPlugin",
|
100
|
-
context: true
|
101
|
-
},
|
102
|
-
(context, chunks) => {
|
103
|
-
const moduleToSourceNameMapping = new Map();
|
104
|
-
const reportProgress =
|
105
|
-
context && context.reportProgress
|
106
|
-
? context.reportProgress
|
107
|
-
: () => {};
|
108
|
-
|
109
|
-
const files = [];
|
110
|
-
for (const chunk of chunks) {
|
111
|
-
for (const file of chunk.files) {
|
112
|
-
if (matchObject(file)) {
|
113
|
-
files.push({
|
114
|
-
file,
|
115
|
-
chunk
|
116
|
-
});
|
117
|
-
}
|
118
|
-
}
|
119
|
-
}
|
120
|
-
|
121
|
-
reportProgress(0.0);
|
122
|
-
const tasks = [];
|
123
|
-
files.forEach(({ file, chunk }, idx) => {
|
124
|
-
reportProgress(
|
125
|
-
(0.5 * idx) / files.length,
|
126
|
-
file,
|
127
|
-
"generate SourceMap"
|
128
|
-
);
|
129
|
-
const task = getTaskForFile(file, chunk, options, compilation);
|
130
|
-
|
131
|
-
if (task) {
|
132
|
-
const modules = task.sourceMap.sources.map(source => {
|
133
|
-
const module = compilation.findModule(source);
|
134
|
-
return module || source;
|
135
|
-
});
|
136
|
-
|
137
|
-
for (let idx = 0; idx < modules.length; idx++) {
|
138
|
-
const module = modules[idx];
|
139
|
-
if (!moduleToSourceNameMapping.get(module)) {
|
140
|
-
moduleToSourceNameMapping.set(
|
141
|
-
module,
|
142
|
-
ModuleFilenameHelpers.createFilename(
|
143
|
-
module,
|
144
|
-
{
|
145
|
-
moduleFilenameTemplate: moduleFilenameTemplate,
|
146
|
-
namespace: namespace
|
147
|
-
},
|
148
|
-
requestShortener
|
149
|
-
)
|
150
|
-
);
|
151
|
-
}
|
152
|
-
}
|
153
|
-
|
154
|
-
task.modules = modules;
|
155
|
-
|
156
|
-
tasks.push(task);
|
157
|
-
}
|
158
|
-
});
|
159
|
-
|
160
|
-
reportProgress(0.5, "resolve sources");
|
161
|
-
const usedNamesSet = new Set(moduleToSourceNameMapping.values());
|
162
|
-
const conflictDetectionSet = new Set();
|
163
|
-
|
164
|
-
// all modules in defined order (longest identifier first)
|
165
|
-
const allModules = Array.from(moduleToSourceNameMapping.keys()).sort(
|
166
|
-
(a, b) => {
|
167
|
-
const ai = typeof a === "string" ? a : a.identifier();
|
168
|
-
const bi = typeof b === "string" ? b : b.identifier();
|
169
|
-
return ai.length - bi.length;
|
170
|
-
}
|
171
|
-
);
|
172
|
-
|
173
|
-
// find modules with conflicting source names
|
174
|
-
for (let idx = 0; idx < allModules.length; idx++) {
|
175
|
-
const module = allModules[idx];
|
176
|
-
let sourceName = moduleToSourceNameMapping.get(module);
|
177
|
-
let hasName = conflictDetectionSet.has(sourceName);
|
178
|
-
if (!hasName) {
|
179
|
-
conflictDetectionSet.add(sourceName);
|
180
|
-
continue;
|
181
|
-
}
|
182
|
-
|
183
|
-
// try the fallback name first
|
184
|
-
sourceName = ModuleFilenameHelpers.createFilename(
|
185
|
-
module,
|
186
|
-
{
|
187
|
-
moduleFilenameTemplate: fallbackModuleFilenameTemplate,
|
188
|
-
namespace: namespace
|
189
|
-
},
|
190
|
-
requestShortener
|
191
|
-
);
|
192
|
-
hasName = usedNamesSet.has(sourceName);
|
193
|
-
if (!hasName) {
|
194
|
-
moduleToSourceNameMapping.set(module, sourceName);
|
195
|
-
usedNamesSet.add(sourceName);
|
196
|
-
continue;
|
197
|
-
}
|
198
|
-
|
199
|
-
// elsewise just append stars until we have a valid name
|
200
|
-
while (hasName) {
|
201
|
-
sourceName += "*";
|
202
|
-
hasName = usedNamesSet.has(sourceName);
|
203
|
-
}
|
204
|
-
moduleToSourceNameMapping.set(module, sourceName);
|
205
|
-
usedNamesSet.add(sourceName);
|
206
|
-
}
|
207
|
-
tasks.forEach((task, index) => {
|
208
|
-
reportProgress(
|
209
|
-
0.5 + (0.5 * index) / tasks.length,
|
210
|
-
task.file,
|
211
|
-
"attach SourceMap"
|
212
|
-
);
|
213
|
-
const assets = Object.create(null);
|
214
|
-
const chunk = task.chunk;
|
215
|
-
const file = task.file;
|
216
|
-
const asset = task.asset;
|
217
|
-
const sourceMap = task.sourceMap;
|
218
|
-
const source = task.source;
|
219
|
-
const modules = task.modules;
|
220
|
-
const moduleFilenames = modules.map(m =>
|
221
|
-
moduleToSourceNameMapping.get(m)
|
222
|
-
);
|
223
|
-
sourceMap.sources = moduleFilenames;
|
224
|
-
if (options.noSources) {
|
225
|
-
sourceMap.sourcesContent = undefined;
|
226
|
-
}
|
227
|
-
sourceMap.sourceRoot = options.sourceRoot || "";
|
228
|
-
sourceMap.file = file;
|
229
|
-
assetsCache.set(asset, { file, assets });
|
230
|
-
let currentSourceMappingURLComment = sourceMappingURLComment;
|
231
|
-
if (
|
232
|
-
currentSourceMappingURLComment !== false &&
|
233
|
-
/\.css($|\?)/i.test(file)
|
234
|
-
) {
|
235
|
-
currentSourceMappingURLComment = currentSourceMappingURLComment.replace(
|
236
|
-
/^\n\/\/(.*)$/,
|
237
|
-
"\n/*$1*/"
|
238
|
-
);
|
239
|
-
}
|
240
|
-
const sourceMapString = JSON.stringify(sourceMap);
|
241
|
-
if (sourceMapFilename) {
|
242
|
-
let filename = file;
|
243
|
-
let query = "";
|
244
|
-
const idx = filename.indexOf("?");
|
245
|
-
if (idx >= 0) {
|
246
|
-
query = filename.substr(idx);
|
247
|
-
filename = filename.substr(0, idx);
|
248
|
-
}
|
249
|
-
let sourceMapFile = compilation.getPath(sourceMapFilename, {
|
250
|
-
chunk,
|
251
|
-
filename: options.fileContext
|
252
|
-
? path.relative(options.fileContext, filename)
|
253
|
-
: filename,
|
254
|
-
query,
|
255
|
-
basename: basename(filename),
|
256
|
-
contentHash: createHash("md4")
|
257
|
-
.update(sourceMapString)
|
258
|
-
.digest("hex")
|
259
|
-
});
|
260
|
-
const sourceMapUrl = options.publicPath
|
261
|
-
? options.publicPath + sourceMapFile.replace(/\\/g, "/")
|
262
|
-
: path
|
263
|
-
.relative(path.dirname(file), sourceMapFile)
|
264
|
-
.replace(/\\/g, "/");
|
265
|
-
if (currentSourceMappingURLComment !== false) {
|
266
|
-
assets[file] = compilation.assets[file] = new ConcatSource(
|
267
|
-
new RawSource(source),
|
268
|
-
currentSourceMappingURLComment.replace(
|
269
|
-
/\[url\]/g,
|
270
|
-
sourceMapUrl
|
271
|
-
)
|
272
|
-
);
|
273
|
-
}
|
274
|
-
assets[sourceMapFile] = compilation.assets[
|
275
|
-
sourceMapFile
|
276
|
-
] = new RawSource(sourceMapString);
|
277
|
-
chunk.files.push(sourceMapFile);
|
278
|
-
} else {
|
279
|
-
assets[file] = compilation.assets[file] = new ConcatSource(
|
280
|
-
new RawSource(source),
|
281
|
-
currentSourceMappingURLComment
|
282
|
-
.replace(/\[map\]/g, () => sourceMapString)
|
283
|
-
.replace(
|
284
|
-
/\[url\]/g,
|
285
|
-
() =>
|
286
|
-
`data:application/json;charset=utf-8;base64,${Buffer.from(
|
287
|
-
sourceMapString,
|
288
|
-
"utf-8"
|
289
|
-
).toString("base64")}`
|
290
|
-
)
|
291
|
-
);
|
292
|
-
}
|
293
|
-
});
|
294
|
-
reportProgress(1.0);
|
295
|
-
}
|
296
|
-
);
|
297
|
-
});
|
298
|
-
}
|
299
|
-
}
|
300
|
-
|
301
|
-
module.exports = SourceMapDevToolPlugin;
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const path = require("path");
|
8
|
+
const { ConcatSource, RawSource } = require("webpack-sources");
|
9
|
+
const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
|
10
|
+
const SourceMapDevToolModuleOptionsPlugin = require("./SourceMapDevToolModuleOptionsPlugin");
|
11
|
+
const createHash = require("./util/createHash");
|
12
|
+
|
13
|
+
const validateOptions = require("schema-utils");
|
14
|
+
const schema = require("../schemas/plugins/SourceMapDevToolPlugin.json");
|
15
|
+
|
16
|
+
const basename = name => {
|
17
|
+
if (!name.includes("/")) return name;
|
18
|
+
return name.substr(name.lastIndexOf("/") + 1);
|
19
|
+
};
|
20
|
+
|
21
|
+
const assetsCache = new WeakMap();
|
22
|
+
|
23
|
+
const getTaskForFile = (file, chunk, options, compilation) => {
|
24
|
+
const asset = compilation.assets[file];
|
25
|
+
const cache = assetsCache.get(asset);
|
26
|
+
if (cache && cache.file === file) {
|
27
|
+
for (const cachedFile in cache.assets) {
|
28
|
+
compilation.assets[cachedFile] = cache.assets[cachedFile];
|
29
|
+
if (cachedFile !== file) chunk.files.push(cachedFile);
|
30
|
+
}
|
31
|
+
return;
|
32
|
+
}
|
33
|
+
let source, sourceMap;
|
34
|
+
if (asset.sourceAndMap) {
|
35
|
+
const sourceAndMap = asset.sourceAndMap(options);
|
36
|
+
sourceMap = sourceAndMap.map;
|
37
|
+
source = sourceAndMap.source;
|
38
|
+
} else {
|
39
|
+
sourceMap = asset.map(options);
|
40
|
+
source = asset.source();
|
41
|
+
}
|
42
|
+
if (sourceMap) {
|
43
|
+
return {
|
44
|
+
chunk,
|
45
|
+
file,
|
46
|
+
asset,
|
47
|
+
source,
|
48
|
+
sourceMap,
|
49
|
+
modules: undefined
|
50
|
+
};
|
51
|
+
}
|
52
|
+
};
|
53
|
+
|
54
|
+
class SourceMapDevToolPlugin {
|
55
|
+
constructor(options) {
|
56
|
+
if (arguments.length > 1) {
|
57
|
+
throw new Error(
|
58
|
+
"SourceMapDevToolPlugin only takes one argument (pass an options object)"
|
59
|
+
);
|
60
|
+
}
|
61
|
+
|
62
|
+
validateOptions(schema, options || {}, "SourceMap DevTool Plugin");
|
63
|
+
|
64
|
+
if (!options) options = {};
|
65
|
+
this.sourceMapFilename = options.filename;
|
66
|
+
this.sourceMappingURLComment =
|
67
|
+
options.append === false
|
68
|
+
? false
|
69
|
+
: options.append || "\n//# sourceMappingURL=[url]";
|
70
|
+
this.moduleFilenameTemplate =
|
71
|
+
options.moduleFilenameTemplate || "webpack://[namespace]/[resourcePath]";
|
72
|
+
this.fallbackModuleFilenameTemplate =
|
73
|
+
options.fallbackModuleFilenameTemplate ||
|
74
|
+
"webpack://[namespace]/[resourcePath]?[hash]";
|
75
|
+
this.namespace = options.namespace || "";
|
76
|
+
this.options = options;
|
77
|
+
}
|
78
|
+
|
79
|
+
apply(compiler) {
|
80
|
+
const sourceMapFilename = this.sourceMapFilename;
|
81
|
+
const sourceMappingURLComment = this.sourceMappingURLComment;
|
82
|
+
const moduleFilenameTemplate = this.moduleFilenameTemplate;
|
83
|
+
const namespace = this.namespace;
|
84
|
+
const fallbackModuleFilenameTemplate = this.fallbackModuleFilenameTemplate;
|
85
|
+
const requestShortener = compiler.requestShortener;
|
86
|
+
const options = this.options;
|
87
|
+
options.test = options.test || /\.(js|css)($|\?)/i;
|
88
|
+
|
89
|
+
const matchObject = ModuleFilenameHelpers.matchObject.bind(
|
90
|
+
undefined,
|
91
|
+
options
|
92
|
+
);
|
93
|
+
|
94
|
+
compiler.hooks.compilation.tap("SourceMapDevToolPlugin", compilation => {
|
95
|
+
new SourceMapDevToolModuleOptionsPlugin(options).apply(compilation);
|
96
|
+
|
97
|
+
compilation.hooks.afterOptimizeChunkAssets.tap(
|
98
|
+
{
|
99
|
+
name: "SourceMapDevToolPlugin",
|
100
|
+
context: true
|
101
|
+
},
|
102
|
+
(context, chunks) => {
|
103
|
+
const moduleToSourceNameMapping = new Map();
|
104
|
+
const reportProgress =
|
105
|
+
context && context.reportProgress
|
106
|
+
? context.reportProgress
|
107
|
+
: () => {};
|
108
|
+
|
109
|
+
const files = [];
|
110
|
+
for (const chunk of chunks) {
|
111
|
+
for (const file of chunk.files) {
|
112
|
+
if (matchObject(file)) {
|
113
|
+
files.push({
|
114
|
+
file,
|
115
|
+
chunk
|
116
|
+
});
|
117
|
+
}
|
118
|
+
}
|
119
|
+
}
|
120
|
+
|
121
|
+
reportProgress(0.0);
|
122
|
+
const tasks = [];
|
123
|
+
files.forEach(({ file, chunk }, idx) => {
|
124
|
+
reportProgress(
|
125
|
+
(0.5 * idx) / files.length,
|
126
|
+
file,
|
127
|
+
"generate SourceMap"
|
128
|
+
);
|
129
|
+
const task = getTaskForFile(file, chunk, options, compilation);
|
130
|
+
|
131
|
+
if (task) {
|
132
|
+
const modules = task.sourceMap.sources.map(source => {
|
133
|
+
const module = compilation.findModule(source);
|
134
|
+
return module || source;
|
135
|
+
});
|
136
|
+
|
137
|
+
for (let idx = 0; idx < modules.length; idx++) {
|
138
|
+
const module = modules[idx];
|
139
|
+
if (!moduleToSourceNameMapping.get(module)) {
|
140
|
+
moduleToSourceNameMapping.set(
|
141
|
+
module,
|
142
|
+
ModuleFilenameHelpers.createFilename(
|
143
|
+
module,
|
144
|
+
{
|
145
|
+
moduleFilenameTemplate: moduleFilenameTemplate,
|
146
|
+
namespace: namespace
|
147
|
+
},
|
148
|
+
requestShortener
|
149
|
+
)
|
150
|
+
);
|
151
|
+
}
|
152
|
+
}
|
153
|
+
|
154
|
+
task.modules = modules;
|
155
|
+
|
156
|
+
tasks.push(task);
|
157
|
+
}
|
158
|
+
});
|
159
|
+
|
160
|
+
reportProgress(0.5, "resolve sources");
|
161
|
+
const usedNamesSet = new Set(moduleToSourceNameMapping.values());
|
162
|
+
const conflictDetectionSet = new Set();
|
163
|
+
|
164
|
+
// all modules in defined order (longest identifier first)
|
165
|
+
const allModules = Array.from(moduleToSourceNameMapping.keys()).sort(
|
166
|
+
(a, b) => {
|
167
|
+
const ai = typeof a === "string" ? a : a.identifier();
|
168
|
+
const bi = typeof b === "string" ? b : b.identifier();
|
169
|
+
return ai.length - bi.length;
|
170
|
+
}
|
171
|
+
);
|
172
|
+
|
173
|
+
// find modules with conflicting source names
|
174
|
+
for (let idx = 0; idx < allModules.length; idx++) {
|
175
|
+
const module = allModules[idx];
|
176
|
+
let sourceName = moduleToSourceNameMapping.get(module);
|
177
|
+
let hasName = conflictDetectionSet.has(sourceName);
|
178
|
+
if (!hasName) {
|
179
|
+
conflictDetectionSet.add(sourceName);
|
180
|
+
continue;
|
181
|
+
}
|
182
|
+
|
183
|
+
// try the fallback name first
|
184
|
+
sourceName = ModuleFilenameHelpers.createFilename(
|
185
|
+
module,
|
186
|
+
{
|
187
|
+
moduleFilenameTemplate: fallbackModuleFilenameTemplate,
|
188
|
+
namespace: namespace
|
189
|
+
},
|
190
|
+
requestShortener
|
191
|
+
);
|
192
|
+
hasName = usedNamesSet.has(sourceName);
|
193
|
+
if (!hasName) {
|
194
|
+
moduleToSourceNameMapping.set(module, sourceName);
|
195
|
+
usedNamesSet.add(sourceName);
|
196
|
+
continue;
|
197
|
+
}
|
198
|
+
|
199
|
+
// elsewise just append stars until we have a valid name
|
200
|
+
while (hasName) {
|
201
|
+
sourceName += "*";
|
202
|
+
hasName = usedNamesSet.has(sourceName);
|
203
|
+
}
|
204
|
+
moduleToSourceNameMapping.set(module, sourceName);
|
205
|
+
usedNamesSet.add(sourceName);
|
206
|
+
}
|
207
|
+
tasks.forEach((task, index) => {
|
208
|
+
reportProgress(
|
209
|
+
0.5 + (0.5 * index) / tasks.length,
|
210
|
+
task.file,
|
211
|
+
"attach SourceMap"
|
212
|
+
);
|
213
|
+
const assets = Object.create(null);
|
214
|
+
const chunk = task.chunk;
|
215
|
+
const file = task.file;
|
216
|
+
const asset = task.asset;
|
217
|
+
const sourceMap = task.sourceMap;
|
218
|
+
const source = task.source;
|
219
|
+
const modules = task.modules;
|
220
|
+
const moduleFilenames = modules.map(m =>
|
221
|
+
moduleToSourceNameMapping.get(m)
|
222
|
+
);
|
223
|
+
sourceMap.sources = moduleFilenames;
|
224
|
+
if (options.noSources) {
|
225
|
+
sourceMap.sourcesContent = undefined;
|
226
|
+
}
|
227
|
+
sourceMap.sourceRoot = options.sourceRoot || "";
|
228
|
+
sourceMap.file = file;
|
229
|
+
assetsCache.set(asset, { file, assets });
|
230
|
+
let currentSourceMappingURLComment = sourceMappingURLComment;
|
231
|
+
if (
|
232
|
+
currentSourceMappingURLComment !== false &&
|
233
|
+
/\.css($|\?)/i.test(file)
|
234
|
+
) {
|
235
|
+
currentSourceMappingURLComment = currentSourceMappingURLComment.replace(
|
236
|
+
/^\n\/\/(.*)$/,
|
237
|
+
"\n/*$1*/"
|
238
|
+
);
|
239
|
+
}
|
240
|
+
const sourceMapString = JSON.stringify(sourceMap);
|
241
|
+
if (sourceMapFilename) {
|
242
|
+
let filename = file;
|
243
|
+
let query = "";
|
244
|
+
const idx = filename.indexOf("?");
|
245
|
+
if (idx >= 0) {
|
246
|
+
query = filename.substr(idx);
|
247
|
+
filename = filename.substr(0, idx);
|
248
|
+
}
|
249
|
+
let sourceMapFile = compilation.getPath(sourceMapFilename, {
|
250
|
+
chunk,
|
251
|
+
filename: options.fileContext
|
252
|
+
? path.relative(options.fileContext, filename)
|
253
|
+
: filename,
|
254
|
+
query,
|
255
|
+
basename: basename(filename),
|
256
|
+
contentHash: createHash("md4")
|
257
|
+
.update(sourceMapString)
|
258
|
+
.digest("hex")
|
259
|
+
});
|
260
|
+
const sourceMapUrl = options.publicPath
|
261
|
+
? options.publicPath + sourceMapFile.replace(/\\/g, "/")
|
262
|
+
: path
|
263
|
+
.relative(path.dirname(file), sourceMapFile)
|
264
|
+
.replace(/\\/g, "/");
|
265
|
+
if (currentSourceMappingURLComment !== false) {
|
266
|
+
assets[file] = compilation.assets[file] = new ConcatSource(
|
267
|
+
new RawSource(source),
|
268
|
+
currentSourceMappingURLComment.replace(
|
269
|
+
/\[url\]/g,
|
270
|
+
sourceMapUrl
|
271
|
+
)
|
272
|
+
);
|
273
|
+
}
|
274
|
+
assets[sourceMapFile] = compilation.assets[
|
275
|
+
sourceMapFile
|
276
|
+
] = new RawSource(sourceMapString);
|
277
|
+
chunk.files.push(sourceMapFile);
|
278
|
+
} else {
|
279
|
+
assets[file] = compilation.assets[file] = new ConcatSource(
|
280
|
+
new RawSource(source),
|
281
|
+
currentSourceMappingURLComment
|
282
|
+
.replace(/\[map\]/g, () => sourceMapString)
|
283
|
+
.replace(
|
284
|
+
/\[url\]/g,
|
285
|
+
() =>
|
286
|
+
`data:application/json;charset=utf-8;base64,${Buffer.from(
|
287
|
+
sourceMapString,
|
288
|
+
"utf-8"
|
289
|
+
).toString("base64")}`
|
290
|
+
)
|
291
|
+
);
|
292
|
+
}
|
293
|
+
});
|
294
|
+
reportProgress(1.0);
|
295
|
+
}
|
296
|
+
);
|
297
|
+
});
|
298
|
+
}
|
299
|
+
}
|
300
|
+
|
301
|
+
module.exports = SourceMapDevToolPlugin;
|
package/lib/Stats.js
CHANGED
@@ -8,6 +8,7 @@ const RequestShortener = require("./RequestShortener");
|
|
8
8
|
const SizeFormatHelpers = require("./SizeFormatHelpers");
|
9
9
|
const formatLocation = require("./formatLocation");
|
10
10
|
const identifierUtils = require("./util/identifier");
|
11
|
+
const compareLocations = require("./compareLocations");
|
11
12
|
|
12
13
|
const optionsOrFallback = (...args) => {
|
13
14
|
let optionValues = [];
|
@@ -15,6 +16,12 @@ const optionsOrFallback = (...args) => {
|
|
15
16
|
return optionValues.find(optionValue => typeof optionValue !== "undefined");
|
16
17
|
};
|
17
18
|
|
19
|
+
const compareId = (a, b) => {
|
20
|
+
if (a < b) return -1;
|
21
|
+
if (a > b) return 1;
|
22
|
+
return 0;
|
23
|
+
};
|
24
|
+
|
18
25
|
class Stats {
|
19
26
|
constructor(compilation) {
|
20
27
|
this.compilation = compilation;
|
@@ -517,6 +524,23 @@ class Stats {
|
|
517
524
|
}
|
518
525
|
if (showReasons) {
|
519
526
|
obj.reasons = module.reasons
|
527
|
+
.sort((a, b) => {
|
528
|
+
if (a.module && !b.module) return -1;
|
529
|
+
if (!a.module && b.module) return 1;
|
530
|
+
if (a.module && b.module) {
|
531
|
+
const cmp = compareId(a.module.id, b.module.id);
|
532
|
+
if (cmp) return cmp;
|
533
|
+
}
|
534
|
+
if (a.dependency && !b.dependency) return -1;
|
535
|
+
if (!a.dependency && b.dependency) return 1;
|
536
|
+
if (a.dependency && b.dependency) {
|
537
|
+
const cmp = compareLocations(a.dependency.loc, b.dependency.loc);
|
538
|
+
if (cmp) return cmp;
|
539
|
+
if (a.dependency.type < b.dependency.type) return -1;
|
540
|
+
if (a.dependency.type > b.dependency.type) return 1;
|
541
|
+
}
|
542
|
+
return 0;
|
543
|
+
})
|
520
544
|
.map(reason => {
|
521
545
|
const obj = {
|
522
546
|
moduleId: reason.module ? reason.module.id : null,
|
@@ -542,8 +566,7 @@ class Stats {
|
|
542
566
|
}
|
543
567
|
}
|
544
568
|
return obj;
|
545
|
-
})
|
546
|
-
.sort((a, b) => a.moduleId - b.moduleId);
|
569
|
+
});
|
547
570
|
}
|
548
571
|
if (showUsedExports) {
|
549
572
|
if (module.used === true) {
|
@@ -614,9 +637,9 @@ class Stats {
|
|
614
637
|
names: chunk.name ? [chunk.name] : [],
|
615
638
|
files: chunk.files.slice(),
|
616
639
|
hash: chunk.renderedHash,
|
617
|
-
siblings: Array.from(siblings).sort(),
|
618
|
-
parents: Array.from(parents).sort(),
|
619
|
-
children: Array.from(children).sort(),
|
640
|
+
siblings: Array.from(siblings).sort(compareId),
|
641
|
+
parents: Array.from(parents).sort(compareId),
|
642
|
+
children: Array.from(children).sort(compareId),
|
620
643
|
childrenByOrder: childIdByOrder
|
621
644
|
};
|
622
645
|
if (showChunkModules) {
|