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,173 +1,173 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Jason Anderson @diurnalist
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const REGEXP_HASH = /\[hash(?::(\d+))?\]/gi,
|
8
|
-
REGEXP_CHUNKHASH = /\[chunkhash(?::(\d+))?\]/gi,
|
9
|
-
REGEXP_MODULEHASH = /\[modulehash(?::(\d+))?\]/gi,
|
10
|
-
REGEXP_CONTENTHASH = /\[contenthash(?::(\d+))?\]/gi,
|
11
|
-
REGEXP_NAME = /\[name\]/gi,
|
12
|
-
REGEXP_ID = /\[id\]/gi,
|
13
|
-
REGEXP_MODULEID = /\[moduleid\]/gi,
|
14
|
-
REGEXP_FILE = /\[file\]/gi,
|
15
|
-
REGEXP_QUERY = /\[query\]/gi,
|
16
|
-
REGEXP_FILEBASE = /\[filebase\]/gi;
|
17
|
-
|
18
|
-
// Using global RegExp for .test is dangerous
|
19
|
-
// We use a normal RegExp instead of .test
|
20
|
-
const REGEXP_HASH_FOR_TEST = new RegExp(REGEXP_HASH.source, "i"),
|
21
|
-
REGEXP_CHUNKHASH_FOR_TEST = new RegExp(REGEXP_CHUNKHASH.source, "i"),
|
22
|
-
REGEXP_CONTENTHASH_FOR_TEST = new RegExp(REGEXP_CONTENTHASH.source, "i"),
|
23
|
-
REGEXP_NAME_FOR_TEST = new RegExp(REGEXP_NAME.source, "i");
|
24
|
-
|
25
|
-
const withHashLength = (replacer, handlerFn) => {
|
26
|
-
const fn = (match, hashLength, ...args) => {
|
27
|
-
const length = hashLength && parseInt(hashLength, 10);
|
28
|
-
if (length && handlerFn) {
|
29
|
-
return handlerFn(length);
|
30
|
-
}
|
31
|
-
const hash = replacer(match, hashLength, ...args);
|
32
|
-
return length ? hash.slice(0, length) : hash;
|
33
|
-
};
|
34
|
-
return fn;
|
35
|
-
};
|
36
|
-
|
37
|
-
const getReplacer = (value, allowEmpty) => {
|
38
|
-
const fn = (match, ...args) => {
|
39
|
-
// last argument in replacer is the entire input string
|
40
|
-
const input = args[args.length - 1];
|
41
|
-
if (value === null || value === undefined) {
|
42
|
-
if (!allowEmpty) {
|
43
|
-
throw new Error(
|
44
|
-
`Path variable ${match} not implemented in this context: ${input}`
|
45
|
-
);
|
46
|
-
}
|
47
|
-
return "";
|
48
|
-
} else {
|
49
|
-
return `${value}`;
|
50
|
-
}
|
51
|
-
};
|
52
|
-
return fn;
|
53
|
-
};
|
54
|
-
|
55
|
-
const replacePathVariables = (path, data) => {
|
56
|
-
const chunk = data.chunk;
|
57
|
-
const chunkId = chunk && chunk.id;
|
58
|
-
const chunkName = chunk && (chunk.name || chunk.id);
|
59
|
-
const chunkHash = chunk && (chunk.renderedHash || chunk.hash);
|
60
|
-
const chunkHashWithLength = chunk && chunk.hashWithLength;
|
61
|
-
const contentHashType = data.contentHashType;
|
62
|
-
const contentHash =
|
63
|
-
(chunk && chunk.contentHash && chunk.contentHash[contentHashType]) ||
|
64
|
-
data.contentHash;
|
65
|
-
const contentHashWithLength =
|
66
|
-
(chunk &&
|
67
|
-
chunk.contentHashWithLength &&
|
68
|
-
chunk.contentHashWithLength[contentHashType]) ||
|
69
|
-
data.contentHashWithLength;
|
70
|
-
const module = data.module;
|
71
|
-
const moduleId = module && module.id;
|
72
|
-
const moduleHash = module && (module.renderedHash || module.hash);
|
73
|
-
const moduleHashWithLength = module && module.hashWithLength;
|
74
|
-
|
75
|
-
if (typeof path === "function") {
|
76
|
-
path = path(data);
|
77
|
-
}
|
78
|
-
|
79
|
-
if (
|
80
|
-
data.noChunkHash &&
|
81
|
-
(REGEXP_CHUNKHASH_FOR_TEST.test(path) ||
|
82
|
-
REGEXP_CONTENTHASH_FOR_TEST.test(path))
|
83
|
-
) {
|
84
|
-
throw new Error(
|
85
|
-
`Cannot use [chunkhash] or [contenthash] for chunk in '${path}' (use [hash] instead)`
|
86
|
-
);
|
87
|
-
}
|
88
|
-
|
89
|
-
return (
|
90
|
-
path
|
91
|
-
.replace(
|
92
|
-
REGEXP_HASH,
|
93
|
-
withHashLength(getReplacer(data.hash), data.hashWithLength)
|
94
|
-
)
|
95
|
-
.replace(
|
96
|
-
REGEXP_CHUNKHASH,
|
97
|
-
withHashLength(getReplacer(chunkHash), chunkHashWithLength)
|
98
|
-
)
|
99
|
-
.replace(
|
100
|
-
REGEXP_CONTENTHASH,
|
101
|
-
withHashLength(getReplacer(contentHash), contentHashWithLength)
|
102
|
-
)
|
103
|
-
.replace(
|
104
|
-
REGEXP_MODULEHASH,
|
105
|
-
withHashLength(getReplacer(moduleHash), moduleHashWithLength)
|
106
|
-
)
|
107
|
-
.replace(REGEXP_ID, getReplacer(chunkId))
|
108
|
-
.replace(REGEXP_MODULEID, getReplacer(moduleId))
|
109
|
-
.replace(REGEXP_NAME, getReplacer(chunkName))
|
110
|
-
.replace(REGEXP_FILE, getReplacer(data.filename))
|
111
|
-
.replace(REGEXP_FILEBASE, getReplacer(data.basename))
|
112
|
-
// query is optional, it's OK if it's in a path but there's nothing to replace it with
|
113
|
-
.replace(REGEXP_QUERY, getReplacer(data.query, true))
|
114
|
-
);
|
115
|
-
};
|
116
|
-
|
117
|
-
class TemplatedPathPlugin {
|
118
|
-
apply(compiler) {
|
119
|
-
compiler.hooks.compilation.tap("TemplatedPathPlugin", compilation => {
|
120
|
-
const mainTemplate = compilation.mainTemplate;
|
121
|
-
|
122
|
-
mainTemplate.hooks.assetPath.tap(
|
123
|
-
"TemplatedPathPlugin",
|
124
|
-
replacePathVariables
|
125
|
-
);
|
126
|
-
|
127
|
-
mainTemplate.hooks.globalHash.tap(
|
128
|
-
"TemplatedPathPlugin",
|
129
|
-
(chunk, paths) => {
|
130
|
-
const outputOptions = mainTemplate.outputOptions;
|
131
|
-
const publicPath = outputOptions.publicPath || "";
|
132
|
-
const filename = outputOptions.filename || "";
|
133
|
-
const chunkFilename =
|
134
|
-
outputOptions.chunkFilename || outputOptions.filename;
|
135
|
-
if (
|
136
|
-
REGEXP_HASH_FOR_TEST.test(publicPath) ||
|
137
|
-
REGEXP_CHUNKHASH_FOR_TEST.test(publicPath) ||
|
138
|
-
REGEXP_CONTENTHASH_FOR_TEST.test(publicPath) ||
|
139
|
-
REGEXP_NAME_FOR_TEST.test(publicPath)
|
140
|
-
)
|
141
|
-
return true;
|
142
|
-
if (REGEXP_HASH_FOR_TEST.test(filename)) return true;
|
143
|
-
if (REGEXP_HASH_FOR_TEST.test(chunkFilename)) return true;
|
144
|
-
if (REGEXP_HASH_FOR_TEST.test(paths.join("|"))) return true;
|
145
|
-
}
|
146
|
-
);
|
147
|
-
|
148
|
-
mainTemplate.hooks.hashForChunk.tap(
|
149
|
-
"TemplatedPathPlugin",
|
150
|
-
(hash, chunk) => {
|
151
|
-
const outputOptions = mainTemplate.outputOptions;
|
152
|
-
const chunkFilename =
|
153
|
-
outputOptions.chunkFilename || outputOptions.filename;
|
154
|
-
if (REGEXP_CHUNKHASH_FOR_TEST.test(chunkFilename)) {
|
155
|
-
hash.update(JSON.stringify(chunk.getChunkMaps(true).hash));
|
156
|
-
}
|
157
|
-
if (REGEXP_CONTENTHASH_FOR_TEST.test(chunkFilename)) {
|
158
|
-
hash.update(
|
159
|
-
JSON.stringify(
|
160
|
-
chunk.getChunkMaps(true).contentHash.javascript || {}
|
161
|
-
)
|
162
|
-
);
|
163
|
-
}
|
164
|
-
if (REGEXP_NAME_FOR_TEST.test(chunkFilename)) {
|
165
|
-
hash.update(JSON.stringify(chunk.getChunkMaps(true).name));
|
166
|
-
}
|
167
|
-
}
|
168
|
-
);
|
169
|
-
});
|
170
|
-
}
|
171
|
-
}
|
172
|
-
|
173
|
-
module.exports = TemplatedPathPlugin;
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Jason Anderson @diurnalist
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const REGEXP_HASH = /\[hash(?::(\d+))?\]/gi,
|
8
|
+
REGEXP_CHUNKHASH = /\[chunkhash(?::(\d+))?\]/gi,
|
9
|
+
REGEXP_MODULEHASH = /\[modulehash(?::(\d+))?\]/gi,
|
10
|
+
REGEXP_CONTENTHASH = /\[contenthash(?::(\d+))?\]/gi,
|
11
|
+
REGEXP_NAME = /\[name\]/gi,
|
12
|
+
REGEXP_ID = /\[id\]/gi,
|
13
|
+
REGEXP_MODULEID = /\[moduleid\]/gi,
|
14
|
+
REGEXP_FILE = /\[file\]/gi,
|
15
|
+
REGEXP_QUERY = /\[query\]/gi,
|
16
|
+
REGEXP_FILEBASE = /\[filebase\]/gi;
|
17
|
+
|
18
|
+
// Using global RegExp for .test is dangerous
|
19
|
+
// We use a normal RegExp instead of .test
|
20
|
+
const REGEXP_HASH_FOR_TEST = new RegExp(REGEXP_HASH.source, "i"),
|
21
|
+
REGEXP_CHUNKHASH_FOR_TEST = new RegExp(REGEXP_CHUNKHASH.source, "i"),
|
22
|
+
REGEXP_CONTENTHASH_FOR_TEST = new RegExp(REGEXP_CONTENTHASH.source, "i"),
|
23
|
+
REGEXP_NAME_FOR_TEST = new RegExp(REGEXP_NAME.source, "i");
|
24
|
+
|
25
|
+
const withHashLength = (replacer, handlerFn) => {
|
26
|
+
const fn = (match, hashLength, ...args) => {
|
27
|
+
const length = hashLength && parseInt(hashLength, 10);
|
28
|
+
if (length && handlerFn) {
|
29
|
+
return handlerFn(length);
|
30
|
+
}
|
31
|
+
const hash = replacer(match, hashLength, ...args);
|
32
|
+
return length ? hash.slice(0, length) : hash;
|
33
|
+
};
|
34
|
+
return fn;
|
35
|
+
};
|
36
|
+
|
37
|
+
const getReplacer = (value, allowEmpty) => {
|
38
|
+
const fn = (match, ...args) => {
|
39
|
+
// last argument in replacer is the entire input string
|
40
|
+
const input = args[args.length - 1];
|
41
|
+
if (value === null || value === undefined) {
|
42
|
+
if (!allowEmpty) {
|
43
|
+
throw new Error(
|
44
|
+
`Path variable ${match} not implemented in this context: ${input}`
|
45
|
+
);
|
46
|
+
}
|
47
|
+
return "";
|
48
|
+
} else {
|
49
|
+
return `${value}`;
|
50
|
+
}
|
51
|
+
};
|
52
|
+
return fn;
|
53
|
+
};
|
54
|
+
|
55
|
+
const replacePathVariables = (path, data) => {
|
56
|
+
const chunk = data.chunk;
|
57
|
+
const chunkId = chunk && chunk.id;
|
58
|
+
const chunkName = chunk && (chunk.name || chunk.id);
|
59
|
+
const chunkHash = chunk && (chunk.renderedHash || chunk.hash);
|
60
|
+
const chunkHashWithLength = chunk && chunk.hashWithLength;
|
61
|
+
const contentHashType = data.contentHashType;
|
62
|
+
const contentHash =
|
63
|
+
(chunk && chunk.contentHash && chunk.contentHash[contentHashType]) ||
|
64
|
+
data.contentHash;
|
65
|
+
const contentHashWithLength =
|
66
|
+
(chunk &&
|
67
|
+
chunk.contentHashWithLength &&
|
68
|
+
chunk.contentHashWithLength[contentHashType]) ||
|
69
|
+
data.contentHashWithLength;
|
70
|
+
const module = data.module;
|
71
|
+
const moduleId = module && module.id;
|
72
|
+
const moduleHash = module && (module.renderedHash || module.hash);
|
73
|
+
const moduleHashWithLength = module && module.hashWithLength;
|
74
|
+
|
75
|
+
if (typeof path === "function") {
|
76
|
+
path = path(data);
|
77
|
+
}
|
78
|
+
|
79
|
+
if (
|
80
|
+
data.noChunkHash &&
|
81
|
+
(REGEXP_CHUNKHASH_FOR_TEST.test(path) ||
|
82
|
+
REGEXP_CONTENTHASH_FOR_TEST.test(path))
|
83
|
+
) {
|
84
|
+
throw new Error(
|
85
|
+
`Cannot use [chunkhash] or [contenthash] for chunk in '${path}' (use [hash] instead)`
|
86
|
+
);
|
87
|
+
}
|
88
|
+
|
89
|
+
return (
|
90
|
+
path
|
91
|
+
.replace(
|
92
|
+
REGEXP_HASH,
|
93
|
+
withHashLength(getReplacer(data.hash), data.hashWithLength)
|
94
|
+
)
|
95
|
+
.replace(
|
96
|
+
REGEXP_CHUNKHASH,
|
97
|
+
withHashLength(getReplacer(chunkHash), chunkHashWithLength)
|
98
|
+
)
|
99
|
+
.replace(
|
100
|
+
REGEXP_CONTENTHASH,
|
101
|
+
withHashLength(getReplacer(contentHash), contentHashWithLength)
|
102
|
+
)
|
103
|
+
.replace(
|
104
|
+
REGEXP_MODULEHASH,
|
105
|
+
withHashLength(getReplacer(moduleHash), moduleHashWithLength)
|
106
|
+
)
|
107
|
+
.replace(REGEXP_ID, getReplacer(chunkId))
|
108
|
+
.replace(REGEXP_MODULEID, getReplacer(moduleId))
|
109
|
+
.replace(REGEXP_NAME, getReplacer(chunkName))
|
110
|
+
.replace(REGEXP_FILE, getReplacer(data.filename))
|
111
|
+
.replace(REGEXP_FILEBASE, getReplacer(data.basename))
|
112
|
+
// query is optional, it's OK if it's in a path but there's nothing to replace it with
|
113
|
+
.replace(REGEXP_QUERY, getReplacer(data.query, true))
|
114
|
+
);
|
115
|
+
};
|
116
|
+
|
117
|
+
class TemplatedPathPlugin {
|
118
|
+
apply(compiler) {
|
119
|
+
compiler.hooks.compilation.tap("TemplatedPathPlugin", compilation => {
|
120
|
+
const mainTemplate = compilation.mainTemplate;
|
121
|
+
|
122
|
+
mainTemplate.hooks.assetPath.tap(
|
123
|
+
"TemplatedPathPlugin",
|
124
|
+
replacePathVariables
|
125
|
+
);
|
126
|
+
|
127
|
+
mainTemplate.hooks.globalHash.tap(
|
128
|
+
"TemplatedPathPlugin",
|
129
|
+
(chunk, paths) => {
|
130
|
+
const outputOptions = mainTemplate.outputOptions;
|
131
|
+
const publicPath = outputOptions.publicPath || "";
|
132
|
+
const filename = outputOptions.filename || "";
|
133
|
+
const chunkFilename =
|
134
|
+
outputOptions.chunkFilename || outputOptions.filename;
|
135
|
+
if (
|
136
|
+
REGEXP_HASH_FOR_TEST.test(publicPath) ||
|
137
|
+
REGEXP_CHUNKHASH_FOR_TEST.test(publicPath) ||
|
138
|
+
REGEXP_CONTENTHASH_FOR_TEST.test(publicPath) ||
|
139
|
+
REGEXP_NAME_FOR_TEST.test(publicPath)
|
140
|
+
)
|
141
|
+
return true;
|
142
|
+
if (REGEXP_HASH_FOR_TEST.test(filename)) return true;
|
143
|
+
if (REGEXP_HASH_FOR_TEST.test(chunkFilename)) return true;
|
144
|
+
if (REGEXP_HASH_FOR_TEST.test(paths.join("|"))) return true;
|
145
|
+
}
|
146
|
+
);
|
147
|
+
|
148
|
+
mainTemplate.hooks.hashForChunk.tap(
|
149
|
+
"TemplatedPathPlugin",
|
150
|
+
(hash, chunk) => {
|
151
|
+
const outputOptions = mainTemplate.outputOptions;
|
152
|
+
const chunkFilename =
|
153
|
+
outputOptions.chunkFilename || outputOptions.filename;
|
154
|
+
if (REGEXP_CHUNKHASH_FOR_TEST.test(chunkFilename)) {
|
155
|
+
hash.update(JSON.stringify(chunk.getChunkMaps(true).hash));
|
156
|
+
}
|
157
|
+
if (REGEXP_CONTENTHASH_FOR_TEST.test(chunkFilename)) {
|
158
|
+
hash.update(
|
159
|
+
JSON.stringify(
|
160
|
+
chunk.getChunkMaps(true).contentHash.javascript || {}
|
161
|
+
)
|
162
|
+
);
|
163
|
+
}
|
164
|
+
if (REGEXP_NAME_FOR_TEST.test(chunkFilename)) {
|
165
|
+
hash.update(JSON.stringify(chunk.getChunkMaps(true).name));
|
166
|
+
}
|
167
|
+
}
|
168
|
+
);
|
169
|
+
});
|
170
|
+
}
|
171
|
+
}
|
172
|
+
|
173
|
+
module.exports = TemplatedPathPlugin;
|
@@ -1,22 +1,22 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const WebpackError = require("./WebpackError");
|
8
|
-
|
9
|
-
class UnsupportedFeatureWarning extends WebpackError {
|
10
|
-
constructor(module, message, loc) {
|
11
|
-
super(message);
|
12
|
-
|
13
|
-
this.name = "UnsupportedFeatureWarning";
|
14
|
-
this.module = module;
|
15
|
-
this.loc = loc;
|
16
|
-
this.hideStack = true;
|
17
|
-
|
18
|
-
Error.captureStackTrace(this, this.constructor);
|
19
|
-
}
|
20
|
-
}
|
21
|
-
|
22
|
-
module.exports = UnsupportedFeatureWarning;
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const WebpackError = require("./WebpackError");
|
8
|
+
|
9
|
+
class UnsupportedFeatureWarning extends WebpackError {
|
10
|
+
constructor(module, message, loc) {
|
11
|
+
super(message);
|
12
|
+
|
13
|
+
this.name = "UnsupportedFeatureWarning";
|
14
|
+
this.module = module;
|
15
|
+
this.loc = loc;
|
16
|
+
this.hideStack = true;
|
17
|
+
|
18
|
+
Error.captureStackTrace(this, this.constructor);
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
module.exports = UnsupportedFeatureWarning;
|
package/lib/UseStrictPlugin.js
CHANGED
@@ -1,54 +1,54 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const ConstDependency = require("./dependencies/ConstDependency");
|
8
|
-
|
9
|
-
/** @typedef {import("./Compiler
|
10
|
-
|
11
|
-
class UseStrictPlugin {
|
12
|
-
/**
|
13
|
-
* @param {Compiler} compiler Webpack Compiler
|
14
|
-
* @returns {void}
|
15
|
-
*/
|
16
|
-
apply(compiler) {
|
17
|
-
compiler.hooks.compilation.tap(
|
18
|
-
"UseStrictPlugin",
|
19
|
-
(compilation, { normalModuleFactory }) => {
|
20
|
-
const handler = parser => {
|
21
|
-
parser.hooks.program.tap("UseStrictPlugin", ast => {
|
22
|
-
const firstNode = ast.body[0];
|
23
|
-
if (
|
24
|
-
firstNode &&
|
25
|
-
firstNode.type === "ExpressionStatement" &&
|
26
|
-
firstNode.expression.type === "Literal" &&
|
27
|
-
firstNode.expression.value === "use strict"
|
28
|
-
) {
|
29
|
-
// Remove "use strict" expression. It will be added later by the renderer again.
|
30
|
-
// This is necessary in order to not break the strict mode when webpack prepends code.
|
31
|
-
// @see https://github.com/webpack/webpack/issues/1970
|
32
|
-
const dep = new ConstDependency("", firstNode.range);
|
33
|
-
dep.loc = firstNode.loc;
|
34
|
-
parser.state.current.addDependency(dep);
|
35
|
-
parser.state.module.buildInfo.strict = true;
|
36
|
-
}
|
37
|
-
});
|
38
|
-
};
|
39
|
-
|
40
|
-
normalModuleFactory.hooks.parser
|
41
|
-
.for("javascript/auto")
|
42
|
-
.tap("UseStrictPlugin", handler);
|
43
|
-
normalModuleFactory.hooks.parser
|
44
|
-
.for("javascript/dynamic")
|
45
|
-
.tap("UseStrictPlugin", handler);
|
46
|
-
normalModuleFactory.hooks.parser
|
47
|
-
.for("javascript/esm")
|
48
|
-
.tap("UseStrictPlugin", handler);
|
49
|
-
}
|
50
|
-
);
|
51
|
-
}
|
52
|
-
}
|
53
|
-
|
54
|
-
module.exports = UseStrictPlugin;
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const ConstDependency = require("./dependencies/ConstDependency");
|
8
|
+
|
9
|
+
/** @typedef {import("./Compiler")} Compiler */
|
10
|
+
|
11
|
+
class UseStrictPlugin {
|
12
|
+
/**
|
13
|
+
* @param {Compiler} compiler Webpack Compiler
|
14
|
+
* @returns {void}
|
15
|
+
*/
|
16
|
+
apply(compiler) {
|
17
|
+
compiler.hooks.compilation.tap(
|
18
|
+
"UseStrictPlugin",
|
19
|
+
(compilation, { normalModuleFactory }) => {
|
20
|
+
const handler = parser => {
|
21
|
+
parser.hooks.program.tap("UseStrictPlugin", ast => {
|
22
|
+
const firstNode = ast.body[0];
|
23
|
+
if (
|
24
|
+
firstNode &&
|
25
|
+
firstNode.type === "ExpressionStatement" &&
|
26
|
+
firstNode.expression.type === "Literal" &&
|
27
|
+
firstNode.expression.value === "use strict"
|
28
|
+
) {
|
29
|
+
// Remove "use strict" expression. It will be added later by the renderer again.
|
30
|
+
// This is necessary in order to not break the strict mode when webpack prepends code.
|
31
|
+
// @see https://github.com/webpack/webpack/issues/1970
|
32
|
+
const dep = new ConstDependency("", firstNode.range);
|
33
|
+
dep.loc = firstNode.loc;
|
34
|
+
parser.state.current.addDependency(dep);
|
35
|
+
parser.state.module.buildInfo.strict = true;
|
36
|
+
}
|
37
|
+
});
|
38
|
+
};
|
39
|
+
|
40
|
+
normalModuleFactory.hooks.parser
|
41
|
+
.for("javascript/auto")
|
42
|
+
.tap("UseStrictPlugin", handler);
|
43
|
+
normalModuleFactory.hooks.parser
|
44
|
+
.for("javascript/dynamic")
|
45
|
+
.tap("UseStrictPlugin", handler);
|
46
|
+
normalModuleFactory.hooks.parser
|
47
|
+
.for("javascript/esm")
|
48
|
+
.tap("UseStrictPlugin", handler);
|
49
|
+
}
|
50
|
+
);
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
module.exports = UseStrictPlugin;
|
@@ -1,37 +1,37 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const CaseSensitiveModulesWarning = require("./CaseSensitiveModulesWarning");
|
8
|
-
|
9
|
-
class WarnCaseSensitiveModulesPlugin {
|
10
|
-
apply(compiler) {
|
11
|
-
compiler.hooks.compilation.tap(
|
12
|
-
"WarnCaseSensitiveModulesPlugin",
|
13
|
-
compilation => {
|
14
|
-
compilation.hooks.seal.tap("WarnCaseSensitiveModulesPlugin", () => {
|
15
|
-
const moduleWithoutCase = new Map();
|
16
|
-
for (const module of compilation.modules) {
|
17
|
-
const identifier = module.identifier().toLowerCase();
|
18
|
-
const array = moduleWithoutCase.get(identifier);
|
19
|
-
if (array) {
|
20
|
-
array.push(module);
|
21
|
-
} else {
|
22
|
-
moduleWithoutCase.set(identifier, [module]);
|
23
|
-
}
|
24
|
-
}
|
25
|
-
for (const pair of moduleWithoutCase) {
|
26
|
-
const array = pair[1];
|
27
|
-
if (array.length > 1) {
|
28
|
-
compilation.warnings.push(new CaseSensitiveModulesWarning(array));
|
29
|
-
}
|
30
|
-
}
|
31
|
-
});
|
32
|
-
}
|
33
|
-
);
|
34
|
-
}
|
35
|
-
}
|
36
|
-
|
37
|
-
module.exports = WarnCaseSensitiveModulesPlugin;
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const CaseSensitiveModulesWarning = require("./CaseSensitiveModulesWarning");
|
8
|
+
|
9
|
+
class WarnCaseSensitiveModulesPlugin {
|
10
|
+
apply(compiler) {
|
11
|
+
compiler.hooks.compilation.tap(
|
12
|
+
"WarnCaseSensitiveModulesPlugin",
|
13
|
+
compilation => {
|
14
|
+
compilation.hooks.seal.tap("WarnCaseSensitiveModulesPlugin", () => {
|
15
|
+
const moduleWithoutCase = new Map();
|
16
|
+
for (const module of compilation.modules) {
|
17
|
+
const identifier = module.identifier().toLowerCase();
|
18
|
+
const array = moduleWithoutCase.get(identifier);
|
19
|
+
if (array) {
|
20
|
+
array.push(module);
|
21
|
+
} else {
|
22
|
+
moduleWithoutCase.set(identifier, [module]);
|
23
|
+
}
|
24
|
+
}
|
25
|
+
for (const pair of moduleWithoutCase) {
|
26
|
+
const array = pair[1];
|
27
|
+
if (array.length > 1) {
|
28
|
+
compilation.warnings.push(new CaseSensitiveModulesWarning(array));
|
29
|
+
}
|
30
|
+
}
|
31
|
+
});
|
32
|
+
}
|
33
|
+
);
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
module.exports = WarnCaseSensitiveModulesPlugin;
|
@@ -1,17 +1,17 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const NoModeWarning = require("./NoModeWarning");
|
8
|
-
|
9
|
-
class WarnNoModeSetPlugin {
|
10
|
-
apply(compiler) {
|
11
|
-
compiler.hooks.thisCompilation.tap("WarnNoModeSetPlugin", compilation => {
|
12
|
-
compilation.warnings.push(new NoModeWarning());
|
13
|
-
});
|
14
|
-
}
|
15
|
-
}
|
16
|
-
|
17
|
-
module.exports = WarnNoModeSetPlugin;
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const NoModeWarning = require("./NoModeWarning");
|
8
|
+
|
9
|
+
class WarnNoModeSetPlugin {
|
10
|
+
apply(compiler) {
|
11
|
+
compiler.hooks.thisCompilation.tap("WarnNoModeSetPlugin", compilation => {
|
12
|
+
compilation.warnings.push(new NoModeWarning());
|
13
|
+
});
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
module.exports = WarnNoModeSetPlugin;
|