webpack 3.6.0 → 3.8.1
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 +716 -716
- package/bin/convert-argv.js +1 -1
- package/bin/webpack.js +6 -0
- package/buildin/.eslintrc +7 -7
- package/buildin/amd-define.js +3 -3
- package/buildin/amd-options.js +2 -2
- package/buildin/global.js +21 -21
- package/buildin/harmony-module.js +24 -24
- package/buildin/module.js +22 -22
- package/buildin/system.js +7 -7
- package/hot/.eslintrc +9 -9
- package/hot/dev-server.js +53 -53
- package/hot/emitter.js +2 -2
- package/hot/log-apply-result.js +38 -38
- package/hot/log.js +44 -44
- package/hot/only-dev-server.js +71 -71
- package/hot/poll.js +34 -34
- package/hot/signal.js +51 -51
- package/lib/APIPlugin.js +45 -45
- package/lib/AsyncDependenciesBlock.js +43 -43
- package/lib/AsyncDependencyToInitialChunkWarning.js +21 -0
- package/lib/AutomaticPrefetchPlugin.js +36 -36
- package/lib/BasicEvaluatedExpression.js +203 -203
- package/lib/CaseSensitiveModulesWarning.js +49 -49
- package/lib/Chunk.js +3 -0
- package/lib/ChunkRenderError.js +24 -24
- package/lib/ChunkTemplate.js +36 -36
- package/lib/CompatibilityPlugin.js +57 -57
- package/lib/Compilation.js +158 -51
- package/lib/Compiler.js +523 -523
- package/lib/ConstPlugin.js +60 -60
- package/lib/ContextExclusionPlugin.js +17 -0
- package/lib/ContextModule.js +431 -431
- package/lib/ContextModuleFactory.js +14 -5
- package/lib/ContextReplacementPlugin.js +111 -111
- package/lib/DefinePlugin.js +123 -123
- package/lib/DelegatedModule.js +98 -92
- package/lib/DelegatedModuleFactoryPlugin.js +59 -59
- package/lib/DelegatedPlugin.js +30 -30
- package/lib/DependenciesBlockVariable.js +51 -51
- package/lib/DllEntryPlugin.js +37 -37
- package/lib/DllModule.js +58 -58
- package/lib/DllModuleFactory.js +20 -20
- package/lib/DllPlugin.js +38 -38
- package/lib/DllReferencePlugin.js +62 -62
- package/lib/DynamicEntryPlugin.js +59 -59
- package/lib/EntryModuleNotFoundError.js +22 -22
- package/lib/EntryOptionPlugin.js +31 -31
- package/lib/EnvironmentPlugin.js +50 -50
- package/lib/ErrorHelpers.js +31 -31
- package/lib/EvalDevToolModulePlugin.js +22 -22
- package/lib/EvalDevToolModuleTemplatePlugin.js +33 -33
- package/lib/EvalSourceMapDevToolModuleTemplatePlugin.js +75 -75
- package/lib/EvalSourceMapDevToolPlugin.js +32 -32
- package/lib/ExportPropertyMainTemplatePlugin.js +31 -31
- package/lib/ExtendedAPIPlugin.js +47 -47
- package/lib/ExternalModule.js +7 -0
- package/lib/ExternalModuleFactoryPlugin.js +91 -91
- package/lib/ExternalsPlugin.js +21 -21
- package/lib/FlagDependencyExportsPlugin.js +101 -101
- package/lib/FunctionModulePlugin.js +24 -24
- package/lib/FunctionModuleTemplatePlugin.js +7 -3
- package/lib/HashedModuleIdsPlugin.js +42 -42
- package/lib/HotUpdateChunkTemplate.js +31 -31
- package/lib/IgnorePlugin.js +69 -69
- package/lib/JsonpExportMainTemplatePlugin.js +37 -37
- package/lib/JsonpHotUpdateChunkTemplatePlugin.js +27 -27
- package/lib/JsonpMainTemplate.runtime.js +2 -1
- package/lib/JsonpMainTemplatePlugin.js +2 -0
- package/lib/JsonpTemplatePlugin.js +21 -21
- package/lib/LibManifestPlugin.js +63 -63
- package/lib/LibraryTemplatePlugin.js +92 -92
- package/lib/LoaderOptionsPlugin.js +36 -36
- package/lib/LoaderTargetPlugin.js +19 -19
- package/lib/MemoryOutputFileSystem.js +5 -5
- package/lib/ModuleBuildError.js +42 -42
- package/lib/ModuleDependencyError.js +22 -22
- package/lib/ModuleDependencyWarning.js +22 -22
- package/lib/ModuleError.js +24 -24
- package/lib/ModuleFilenameHelpers.js +162 -162
- package/lib/ModuleNotFoundError.js +26 -26
- package/lib/ModuleParseError.js +1 -1
- package/lib/ModuleReason.js +50 -50
- package/lib/ModuleTemplate.js +23 -23
- package/lib/ModuleWarning.js +24 -24
- package/lib/MovedToPluginWarningPlugin.js +21 -21
- package/lib/MultiCompiler.js +164 -164
- package/lib/MultiEntryPlugin.js +39 -39
- package/lib/MultiModuleFactory.js +19 -19
- package/lib/MultiStats.js +79 -79
- package/lib/MultiWatching.js +32 -32
- package/lib/NamedChunksPlugin.js +30 -30
- package/lib/NamedModulesPlugin.js +27 -27
- package/lib/NewWatchingPlugin.js +15 -15
- package/lib/NoEmitOnErrorsPlugin.js +22 -22
- package/lib/NoErrorsPlugin.js +29 -29
- package/lib/NodeStuffPlugin.js +97 -97
- package/lib/NormalModuleReplacementPlugin.js +45 -45
- package/lib/NullFactory.js +12 -12
- package/lib/OptionsApply.js +10 -10
- package/lib/Parser.js +65 -34
- package/lib/ParserHelpers.js +85 -85
- package/lib/PrefetchPlugin.js +31 -31
- package/lib/ProgressPlugin.js +192 -192
- package/lib/ProvidePlugin.js +55 -55
- package/lib/RawModule.js +54 -54
- package/lib/RequestShortener.js +63 -63
- package/lib/RequireJsStuffPlugin.js +31 -31
- package/lib/RuleSet.js +444 -444
- package/lib/SetVarMainTemplatePlugin.js +41 -41
- package/lib/SingleEntryPlugin.js +35 -35
- package/lib/SizeFormatHelpers.js +18 -18
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +37 -37
- package/lib/Stats.js +27 -8
- package/lib/UmdMainTemplatePlugin.js +1 -1
- package/lib/UnsupportedFeatureWarning.js +21 -21
- package/lib/UseStrictPlugin.js +34 -34
- package/lib/WarnCaseSensitiveModulesPlugin.js +31 -31
- package/lib/WatchIgnorePlugin.js +49 -49
- package/lib/WebpackError.js +11 -11
- package/lib/WebpackOptionsDefaulter.js +129 -129
- package/lib/WebpackOptionsValidationError.js +196 -196
- package/lib/compareLocations.js +36 -36
- package/lib/dependencies/AMDDefineDependency.js +142 -142
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +5 -1
- package/lib/dependencies/AMDPlugin.js +119 -119
- package/lib/dependencies/AMDRequireArrayDependency.js +2 -0
- package/lib/dependencies/AMDRequireContextDependency.js +0 -9
- package/lib/dependencies/AMDRequireDependenciesBlock.js +33 -33
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +177 -177
- package/lib/dependencies/AMDRequireDependency.js +67 -67
- package/lib/dependencies/AMDRequireItemDependency.js +22 -22
- package/lib/dependencies/CommonJsRequireContextDependency.js +0 -10
- package/lib/dependencies/CommonJsRequireDependency.js +22 -22
- package/lib/dependencies/CommonJsRequireDependencyParserPlugin.js +89 -89
- package/lib/dependencies/ConstDependency.js +32 -32
- package/lib/dependencies/ContextDependency.js +20 -0
- package/lib/dependencies/ContextDependencyHelpers.js +71 -71
- package/lib/dependencies/ContextElementDependency.js +21 -21
- package/lib/dependencies/CriticalDependencyWarning.js +20 -20
- package/lib/dependencies/DelegatedExportsDependency.js +33 -33
- package/lib/dependencies/DelegatedSourceDependency.js +18 -18
- package/lib/dependencies/DllEntryDependency.js +20 -20
- package/lib/dependencies/HarmonyCompatibilityDependency.js +30 -30
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +14 -2
- package/lib/dependencies/HarmonyExportExpressionDependency.js +0 -7
- package/lib/dependencies/HarmonyExportHeaderDependency.js +28 -28
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +45 -45
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +0 -13
- package/lib/dependencies/HarmonyModulesHelpers.js +0 -53
- package/lib/dependencies/ImportContextDependency.js +0 -10
- package/lib/dependencies/ImportDependenciesBlock.js +17 -17
- package/lib/dependencies/ImportEagerContextDependency.js +22 -22
- package/lib/dependencies/ImportLazyContextDependency.js +22 -22
- package/lib/dependencies/ImportLazyOnceContextDependency.js +22 -22
- package/lib/dependencies/ImportParserPlugin.js +89 -89
- package/lib/dependencies/ImportPlugin.js +60 -60
- package/lib/dependencies/ImportWeakContextDependency.js +22 -22
- package/lib/dependencies/LoaderDependency.js +18 -18
- package/lib/dependencies/LoaderPlugin.js +60 -60
- package/lib/dependencies/LocalModule.js +23 -23
- package/lib/dependencies/LocalModuleDependency.js +24 -24
- package/lib/dependencies/LocalModulesHelpers.js +46 -46
- package/lib/dependencies/ModuleDependency.js +23 -23
- package/lib/dependencies/ModuleHotAcceptDependency.js +23 -23
- package/lib/dependencies/ModuleHotDeclineDependency.js +23 -23
- package/lib/dependencies/MultiEntryDependency.js +20 -20
- package/lib/dependencies/NullDependency.js +24 -24
- package/lib/dependencies/PrefetchDependency.js +18 -18
- package/lib/dependencies/RequireContextDependency.js +26 -26
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +50 -50
- package/lib/dependencies/RequireContextPlugin.js +96 -96
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +22 -22
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +102 -102
- package/lib/dependencies/RequireEnsureDependency.js +38 -38
- package/lib/dependencies/RequireEnsureItemDependency.js +21 -21
- package/lib/dependencies/RequireEnsurePlugin.js +40 -40
- package/lib/dependencies/RequireHeaderDependency.js +26 -26
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +21 -21
- package/lib/dependencies/RequireIncludePlugin.js +33 -33
- package/lib/dependencies/RequireResolveContextDependency.js +0 -10
- package/lib/dependencies/RequireResolveDependency.js +22 -22
- package/lib/dependencies/RequireResolveDependencyParserPlugin.js +71 -71
- package/lib/dependencies/RequireResolveHeaderDependency.js +26 -26
- package/lib/dependencies/SingleEntryDependency.js +18 -18
- package/lib/dependencies/SystemPlugin.js +44 -44
- package/lib/dependencies/UnsupportedDependency.js +23 -23
- package/lib/dependencies/WebpackMissingModule.js +18 -18
- package/lib/dependencies/getFunctionExpression.js +44 -44
- package/lib/formatLocation.js +54 -54
- package/lib/node/NodeChunkTemplatePlugin.js +27 -27
- package/lib/node/NodeEnvironmentPlugin.js +25 -25
- package/lib/node/NodeHotUpdateChunkTemplatePlugin.js +27 -27
- package/lib/node/NodeMainTemplate.runtime.js +24 -24
- package/lib/node/NodeMainTemplateAsync.runtime.js +40 -40
- package/lib/node/NodeOutputFileSystem.js +22 -22
- package/lib/node/NodeSourcePlugin.js +88 -88
- package/lib/node/NodeTargetPlugin.js +15 -15
- package/lib/node/NodeTemplatePlugin.js +27 -27
- package/lib/node/NodeWatchFileSystem.js +72 -72
- package/lib/optimize/ChunkModuleIdRangePlugin.js +53 -53
- package/lib/optimize/CommonsChunkPlugin.js +40 -19
- package/lib/optimize/ConcatenatedModule.js +27 -24
- package/lib/optimize/DedupePlugin.js +15 -15
- package/lib/optimize/FlagIncludedChunksPlugin.js +35 -35
- package/lib/optimize/LimitChunkCountPlugin.js +59 -59
- package/lib/optimize/MinChunkSizePlugin.js +65 -65
- package/lib/optimize/RemoveEmptyChunksPlugin.js +21 -21
- package/lib/optimize/UglifyJsPlugin.js +9 -9
- package/lib/performance/AssetsOverSizeLimitWarning.js +23 -23
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +28 -28
- package/lib/performance/NoAsyncChunksWarning.js +20 -20
- package/lib/performance/SizeLimitsPlugin.js +102 -102
- package/lib/prepareOptions.js +29 -29
- package/lib/removeAndDo.js +15 -15
- package/lib/util/Queue.js +42 -0
- package/lib/util/Semaphore.js +32 -32
- package/lib/util/identifier.js +38 -38
- package/lib/validateSchema.js +66 -66
- package/lib/web/WebEnvironmentPlugin.js +18 -18
- package/lib/webpack.js +1 -0
- package/lib/webworker/WebWorkerChunkTemplatePlugin.js +29 -29
- package/lib/webworker/WebWorkerHotUpdateChunkTemplatePlugin.js +28 -28
- package/lib/webworker/WebWorkerMainTemplate.runtime.js +58 -58
- package/lib/webworker/WebWorkerTemplatePlugin.js +20 -20
- package/package.json +1 -1
- package/schemas/ajv.absolutePath.js +29 -29
- package/schemas/webpackOptionsSchema.json +69 -0
package/lib/MultiCompiler.js
CHANGED
@@ -1,164 +1,164 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const Tapable = require("tapable");
|
8
|
-
const asyncLib = require("async");
|
9
|
-
const MultiWatching = require("./MultiWatching");
|
10
|
-
const MultiStats = require("./MultiStats");
|
11
|
-
|
12
|
-
module.exports = class MultiCompiler extends Tapable {
|
13
|
-
constructor(compilers) {
|
14
|
-
super();
|
15
|
-
if(!Array.isArray(compilers)) {
|
16
|
-
compilers = Object.keys(compilers).map((name) => {
|
17
|
-
compilers[name].name = name;
|
18
|
-
return compilers[name];
|
19
|
-
});
|
20
|
-
}
|
21
|
-
this.compilers = compilers;
|
22
|
-
let doneCompilers = 0;
|
23
|
-
let compilerStats = [];
|
24
|
-
this.compilers.forEach((compiler, idx) => {
|
25
|
-
let compilerDone = false;
|
26
|
-
compiler.plugin("done", stats => {
|
27
|
-
if(!compilerDone) {
|
28
|
-
compilerDone = true;
|
29
|
-
doneCompilers++;
|
30
|
-
}
|
31
|
-
compilerStats[idx] = stats;
|
32
|
-
if(doneCompilers === this.compilers.length) {
|
33
|
-
this.applyPlugins("done", new MultiStats(compilerStats));
|
34
|
-
}
|
35
|
-
});
|
36
|
-
compiler.plugin("invalid", () => {
|
37
|
-
if(compilerDone) {
|
38
|
-
compilerDone = false;
|
39
|
-
doneCompilers--;
|
40
|
-
}
|
41
|
-
this.applyPlugins("invalid");
|
42
|
-
});
|
43
|
-
}, this);
|
44
|
-
}
|
45
|
-
|
46
|
-
get outputPath() {
|
47
|
-
let commonPath = this.compilers[0].outputPath;
|
48
|
-
for(const compiler of this.compilers) {
|
49
|
-
while(compiler.outputPath.indexOf(commonPath) !== 0 && /[/\\]/.test(commonPath)) {
|
50
|
-
commonPath = commonPath.replace(/[/\\][^/\\]*$/, "");
|
51
|
-
}
|
52
|
-
}
|
53
|
-
|
54
|
-
if(!commonPath && this.compilers[0].outputPath[0] === "/") return "/";
|
55
|
-
return commonPath;
|
56
|
-
}
|
57
|
-
|
58
|
-
get inputFileSystem() {
|
59
|
-
throw new Error("Cannot read inputFileSystem of a MultiCompiler");
|
60
|
-
}
|
61
|
-
|
62
|
-
get outputFileSystem() {
|
63
|
-
throw new Error("Cannot read outputFileSystem of a MultiCompiler");
|
64
|
-
}
|
65
|
-
|
66
|
-
set inputFileSystem(value) {
|
67
|
-
this.compilers.forEach(compiler => {
|
68
|
-
compiler.inputFileSystem = value;
|
69
|
-
});
|
70
|
-
}
|
71
|
-
|
72
|
-
set outputFileSystem(value) {
|
73
|
-
this.compilers.forEach(compiler => {
|
74
|
-
compiler.outputFileSystem = value;
|
75
|
-
});
|
76
|
-
}
|
77
|
-
|
78
|
-
runWithDependencies(compilers, fn, callback) {
|
79
|
-
let fulfilledNames = {};
|
80
|
-
let remainingCompilers = compilers;
|
81
|
-
const isDependencyFulfilled = (d) => fulfilledNames[d];
|
82
|
-
const getReadyCompilers = () => {
|
83
|
-
let readyCompilers = [];
|
84
|
-
let list = remainingCompilers;
|
85
|
-
remainingCompilers = [];
|
86
|
-
for(const c of list) {
|
87
|
-
const ready = !c.dependencies || c.dependencies.every(isDependencyFulfilled);
|
88
|
-
if(ready)
|
89
|
-
readyCompilers.push(c);
|
90
|
-
else
|
91
|
-
remainingCompilers.push(c);
|
92
|
-
}
|
93
|
-
return readyCompilers;
|
94
|
-
};
|
95
|
-
const runCompilers = (callback) => {
|
96
|
-
if(remainingCompilers.length === 0) return callback();
|
97
|
-
asyncLib.map(getReadyCompilers(), (compiler, callback) => {
|
98
|
-
fn(compiler, (err) => {
|
99
|
-
if(err) return callback(err);
|
100
|
-
fulfilledNames[compiler.name] = true;
|
101
|
-
runCompilers(callback);
|
102
|
-
});
|
103
|
-
}, callback);
|
104
|
-
};
|
105
|
-
runCompilers(callback);
|
106
|
-
}
|
107
|
-
|
108
|
-
watch(watchOptions, handler) {
|
109
|
-
let watchings = [];
|
110
|
-
let allStats = this.compilers.map(() => null);
|
111
|
-
let compilerStatus = this.compilers.map(() => false);
|
112
|
-
this.runWithDependencies(this.compilers, (compiler, callback) => {
|
113
|
-
const compilerIdx = this.compilers.indexOf(compiler);
|
114
|
-
let firstRun = true;
|
115
|
-
let watching = compiler.watch(Array.isArray(watchOptions) ? watchOptions[compilerIdx] : watchOptions, (err, stats) => {
|
116
|
-
if(err)
|
117
|
-
handler(err);
|
118
|
-
if(stats) {
|
119
|
-
allStats[compilerIdx] = stats;
|
120
|
-
compilerStatus[compilerIdx] = "new";
|
121
|
-
if(compilerStatus.every(Boolean)) {
|
122
|
-
const freshStats = allStats.filter((s, idx) => {
|
123
|
-
return compilerStatus[idx] === "new";
|
124
|
-
});
|
125
|
-
compilerStatus.fill(true);
|
126
|
-
const multiStats = new MultiStats(freshStats);
|
127
|
-
handler(null, multiStats);
|
128
|
-
}
|
129
|
-
}
|
130
|
-
if(firstRun && !err) {
|
131
|
-
firstRun = false;
|
132
|
-
callback();
|
133
|
-
}
|
134
|
-
});
|
135
|
-
watchings.push(watching);
|
136
|
-
}, () => {
|
137
|
-
// ignore
|
138
|
-
});
|
139
|
-
|
140
|
-
return new MultiWatching(watchings, this);
|
141
|
-
}
|
142
|
-
|
143
|
-
run(callback) {
|
144
|
-
const allStats = this.compilers.map(() => null);
|
145
|
-
this.runWithDependencies(this.compilers, ((compiler, callback) => {
|
146
|
-
const compilerIdx = this.compilers.indexOf(compiler);
|
147
|
-
compiler.run((err, stats) => {
|
148
|
-
if(err) return callback(err);
|
149
|
-
allStats[compilerIdx] = stats;
|
150
|
-
callback();
|
151
|
-
});
|
152
|
-
}), (err) => {
|
153
|
-
if(err) return callback(err);
|
154
|
-
callback(null, new MultiStats(allStats));
|
155
|
-
});
|
156
|
-
}
|
157
|
-
|
158
|
-
purgeInputFileSystem() {
|
159
|
-
this.compilers.forEach((compiler) => {
|
160
|
-
if(compiler.inputFileSystem && compiler.inputFileSystem.purge)
|
161
|
-
compiler.inputFileSystem.purge();
|
162
|
-
});
|
163
|
-
}
|
164
|
-
};
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const Tapable = require("tapable");
|
8
|
+
const asyncLib = require("async");
|
9
|
+
const MultiWatching = require("./MultiWatching");
|
10
|
+
const MultiStats = require("./MultiStats");
|
11
|
+
|
12
|
+
module.exports = class MultiCompiler extends Tapable {
|
13
|
+
constructor(compilers) {
|
14
|
+
super();
|
15
|
+
if(!Array.isArray(compilers)) {
|
16
|
+
compilers = Object.keys(compilers).map((name) => {
|
17
|
+
compilers[name].name = name;
|
18
|
+
return compilers[name];
|
19
|
+
});
|
20
|
+
}
|
21
|
+
this.compilers = compilers;
|
22
|
+
let doneCompilers = 0;
|
23
|
+
let compilerStats = [];
|
24
|
+
this.compilers.forEach((compiler, idx) => {
|
25
|
+
let compilerDone = false;
|
26
|
+
compiler.plugin("done", stats => {
|
27
|
+
if(!compilerDone) {
|
28
|
+
compilerDone = true;
|
29
|
+
doneCompilers++;
|
30
|
+
}
|
31
|
+
compilerStats[idx] = stats;
|
32
|
+
if(doneCompilers === this.compilers.length) {
|
33
|
+
this.applyPlugins("done", new MultiStats(compilerStats));
|
34
|
+
}
|
35
|
+
});
|
36
|
+
compiler.plugin("invalid", () => {
|
37
|
+
if(compilerDone) {
|
38
|
+
compilerDone = false;
|
39
|
+
doneCompilers--;
|
40
|
+
}
|
41
|
+
this.applyPlugins("invalid");
|
42
|
+
});
|
43
|
+
}, this);
|
44
|
+
}
|
45
|
+
|
46
|
+
get outputPath() {
|
47
|
+
let commonPath = this.compilers[0].outputPath;
|
48
|
+
for(const compiler of this.compilers) {
|
49
|
+
while(compiler.outputPath.indexOf(commonPath) !== 0 && /[/\\]/.test(commonPath)) {
|
50
|
+
commonPath = commonPath.replace(/[/\\][^/\\]*$/, "");
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
if(!commonPath && this.compilers[0].outputPath[0] === "/") return "/";
|
55
|
+
return commonPath;
|
56
|
+
}
|
57
|
+
|
58
|
+
get inputFileSystem() {
|
59
|
+
throw new Error("Cannot read inputFileSystem of a MultiCompiler");
|
60
|
+
}
|
61
|
+
|
62
|
+
get outputFileSystem() {
|
63
|
+
throw new Error("Cannot read outputFileSystem of a MultiCompiler");
|
64
|
+
}
|
65
|
+
|
66
|
+
set inputFileSystem(value) {
|
67
|
+
this.compilers.forEach(compiler => {
|
68
|
+
compiler.inputFileSystem = value;
|
69
|
+
});
|
70
|
+
}
|
71
|
+
|
72
|
+
set outputFileSystem(value) {
|
73
|
+
this.compilers.forEach(compiler => {
|
74
|
+
compiler.outputFileSystem = value;
|
75
|
+
});
|
76
|
+
}
|
77
|
+
|
78
|
+
runWithDependencies(compilers, fn, callback) {
|
79
|
+
let fulfilledNames = {};
|
80
|
+
let remainingCompilers = compilers;
|
81
|
+
const isDependencyFulfilled = (d) => fulfilledNames[d];
|
82
|
+
const getReadyCompilers = () => {
|
83
|
+
let readyCompilers = [];
|
84
|
+
let list = remainingCompilers;
|
85
|
+
remainingCompilers = [];
|
86
|
+
for(const c of list) {
|
87
|
+
const ready = !c.dependencies || c.dependencies.every(isDependencyFulfilled);
|
88
|
+
if(ready)
|
89
|
+
readyCompilers.push(c);
|
90
|
+
else
|
91
|
+
remainingCompilers.push(c);
|
92
|
+
}
|
93
|
+
return readyCompilers;
|
94
|
+
};
|
95
|
+
const runCompilers = (callback) => {
|
96
|
+
if(remainingCompilers.length === 0) return callback();
|
97
|
+
asyncLib.map(getReadyCompilers(), (compiler, callback) => {
|
98
|
+
fn(compiler, (err) => {
|
99
|
+
if(err) return callback(err);
|
100
|
+
fulfilledNames[compiler.name] = true;
|
101
|
+
runCompilers(callback);
|
102
|
+
});
|
103
|
+
}, callback);
|
104
|
+
};
|
105
|
+
runCompilers(callback);
|
106
|
+
}
|
107
|
+
|
108
|
+
watch(watchOptions, handler) {
|
109
|
+
let watchings = [];
|
110
|
+
let allStats = this.compilers.map(() => null);
|
111
|
+
let compilerStatus = this.compilers.map(() => false);
|
112
|
+
this.runWithDependencies(this.compilers, (compiler, callback) => {
|
113
|
+
const compilerIdx = this.compilers.indexOf(compiler);
|
114
|
+
let firstRun = true;
|
115
|
+
let watching = compiler.watch(Array.isArray(watchOptions) ? watchOptions[compilerIdx] : watchOptions, (err, stats) => {
|
116
|
+
if(err)
|
117
|
+
handler(err);
|
118
|
+
if(stats) {
|
119
|
+
allStats[compilerIdx] = stats;
|
120
|
+
compilerStatus[compilerIdx] = "new";
|
121
|
+
if(compilerStatus.every(Boolean)) {
|
122
|
+
const freshStats = allStats.filter((s, idx) => {
|
123
|
+
return compilerStatus[idx] === "new";
|
124
|
+
});
|
125
|
+
compilerStatus.fill(true);
|
126
|
+
const multiStats = new MultiStats(freshStats);
|
127
|
+
handler(null, multiStats);
|
128
|
+
}
|
129
|
+
}
|
130
|
+
if(firstRun && !err) {
|
131
|
+
firstRun = false;
|
132
|
+
callback();
|
133
|
+
}
|
134
|
+
});
|
135
|
+
watchings.push(watching);
|
136
|
+
}, () => {
|
137
|
+
// ignore
|
138
|
+
});
|
139
|
+
|
140
|
+
return new MultiWatching(watchings, this);
|
141
|
+
}
|
142
|
+
|
143
|
+
run(callback) {
|
144
|
+
const allStats = this.compilers.map(() => null);
|
145
|
+
this.runWithDependencies(this.compilers, ((compiler, callback) => {
|
146
|
+
const compilerIdx = this.compilers.indexOf(compiler);
|
147
|
+
compiler.run((err, stats) => {
|
148
|
+
if(err) return callback(err);
|
149
|
+
allStats[compilerIdx] = stats;
|
150
|
+
callback();
|
151
|
+
});
|
152
|
+
}), (err) => {
|
153
|
+
if(err) return callback(err);
|
154
|
+
callback(null, new MultiStats(allStats));
|
155
|
+
});
|
156
|
+
}
|
157
|
+
|
158
|
+
purgeInputFileSystem() {
|
159
|
+
this.compilers.forEach((compiler) => {
|
160
|
+
if(compiler.inputFileSystem && compiler.inputFileSystem.purge)
|
161
|
+
compiler.inputFileSystem.purge();
|
162
|
+
});
|
163
|
+
}
|
164
|
+
};
|
package/lib/MultiEntryPlugin.js
CHANGED
@@ -1,39 +1,39 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const MultiEntryDependency = require("./dependencies/MultiEntryDependency");
|
8
|
-
const SingleEntryDependency = require("./dependencies/SingleEntryDependency");
|
9
|
-
const MultiModuleFactory = require("./MultiModuleFactory");
|
10
|
-
|
11
|
-
module.exports = class MultiEntryPlugin {
|
12
|
-
constructor(context, entries, name) {
|
13
|
-
this.context = context;
|
14
|
-
this.entries = entries;
|
15
|
-
this.name = name;
|
16
|
-
}
|
17
|
-
|
18
|
-
apply(compiler) {
|
19
|
-
compiler.plugin("compilation", (compilation, params) => {
|
20
|
-
const multiModuleFactory = new MultiModuleFactory();
|
21
|
-
const normalModuleFactory = params.normalModuleFactory;
|
22
|
-
|
23
|
-
compilation.dependencyFactories.set(MultiEntryDependency, multiModuleFactory);
|
24
|
-
compilation.dependencyFactories.set(SingleEntryDependency, normalModuleFactory);
|
25
|
-
});
|
26
|
-
compiler.plugin("make", (compilation, callback) => {
|
27
|
-
const dep = MultiEntryPlugin.createDependency(this.entries, this.name);
|
28
|
-
compilation.addEntry(this.context, dep, this.name, callback);
|
29
|
-
});
|
30
|
-
}
|
31
|
-
|
32
|
-
static createDependency(entries, name) {
|
33
|
-
return new MultiEntryDependency(entries.map((e, idx) => {
|
34
|
-
const dep = new SingleEntryDependency(e);
|
35
|
-
dep.loc = name + ":" + (100000 + idx);
|
36
|
-
return dep;
|
37
|
-
}), name);
|
38
|
-
}
|
39
|
-
};
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const MultiEntryDependency = require("./dependencies/MultiEntryDependency");
|
8
|
+
const SingleEntryDependency = require("./dependencies/SingleEntryDependency");
|
9
|
+
const MultiModuleFactory = require("./MultiModuleFactory");
|
10
|
+
|
11
|
+
module.exports = class MultiEntryPlugin {
|
12
|
+
constructor(context, entries, name) {
|
13
|
+
this.context = context;
|
14
|
+
this.entries = entries;
|
15
|
+
this.name = name;
|
16
|
+
}
|
17
|
+
|
18
|
+
apply(compiler) {
|
19
|
+
compiler.plugin("compilation", (compilation, params) => {
|
20
|
+
const multiModuleFactory = new MultiModuleFactory();
|
21
|
+
const normalModuleFactory = params.normalModuleFactory;
|
22
|
+
|
23
|
+
compilation.dependencyFactories.set(MultiEntryDependency, multiModuleFactory);
|
24
|
+
compilation.dependencyFactories.set(SingleEntryDependency, normalModuleFactory);
|
25
|
+
});
|
26
|
+
compiler.plugin("make", (compilation, callback) => {
|
27
|
+
const dep = MultiEntryPlugin.createDependency(this.entries, this.name);
|
28
|
+
compilation.addEntry(this.context, dep, this.name, callback);
|
29
|
+
});
|
30
|
+
}
|
31
|
+
|
32
|
+
static createDependency(entries, name) {
|
33
|
+
return new MultiEntryDependency(entries.map((e, idx) => {
|
34
|
+
const dep = new SingleEntryDependency(e);
|
35
|
+
dep.loc = name + ":" + (100000 + idx);
|
36
|
+
return dep;
|
37
|
+
}), name);
|
38
|
+
}
|
39
|
+
};
|
@@ -1,19 +1,19 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const Tapable = require("tapable");
|
8
|
-
const MultiModule = require("./MultiModule");
|
9
|
-
|
10
|
-
module.exports = class MultiModuleFactory extends Tapable {
|
11
|
-
constructor() {
|
12
|
-
super();
|
13
|
-
}
|
14
|
-
|
15
|
-
create(data, callback) {
|
16
|
-
const dependency = data.dependencies[0];
|
17
|
-
callback(null, new MultiModule(data.context, dependency.dependencies, dependency.name));
|
18
|
-
}
|
19
|
-
};
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const Tapable = require("tapable");
|
8
|
+
const MultiModule = require("./MultiModule");
|
9
|
+
|
10
|
+
module.exports = class MultiModuleFactory extends Tapable {
|
11
|
+
constructor() {
|
12
|
+
super();
|
13
|
+
}
|
14
|
+
|
15
|
+
create(data, callback) {
|
16
|
+
const dependency = data.dependencies[0];
|
17
|
+
callback(null, new MultiModule(data.context, dependency.dependencies, dependency.name));
|
18
|
+
}
|
19
|
+
};
|
package/lib/MultiStats.js
CHANGED
@@ -1,79 +1,79 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const Stats = require("./Stats");
|
8
|
-
|
9
|
-
const optionOrFallback = (optionValue, fallbackValue) => optionValue !== undefined ? optionValue : fallbackValue;
|
10
|
-
|
11
|
-
class MultiStats {
|
12
|
-
constructor(stats) {
|
13
|
-
this.stats = stats;
|
14
|
-
this.hash = stats.map(stat => stat.hash).join("");
|
15
|
-
}
|
16
|
-
|
17
|
-
hasErrors() {
|
18
|
-
return this.stats.map((stat) => stat.hasErrors()).reduce((a, b) => a || b, false);
|
19
|
-
}
|
20
|
-
|
21
|
-
hasWarnings() {
|
22
|
-
return this.stats.map((stat) => stat.hasWarnings()).reduce((a, b) => a || b, false);
|
23
|
-
}
|
24
|
-
|
25
|
-
toJson(options, forToString) {
|
26
|
-
if(typeof options === "boolean" || typeof options === "string") {
|
27
|
-
options = Stats.presetToOptions(options);
|
28
|
-
} else if(!options) {
|
29
|
-
options = {};
|
30
|
-
}
|
31
|
-
const jsons = this.stats.map((stat, idx) => {
|
32
|
-
const childOptions = Stats.getChildOptions(options, idx);
|
33
|
-
const obj = stat.toJson(childOptions, forToString);
|
34
|
-
obj.name = stat.compilation && stat.compilation.name;
|
35
|
-
return obj;
|
36
|
-
});
|
37
|
-
const showVersion = typeof options.version === "undefined" ? jsons.every(j => j.version) : options.version !== false;
|
38
|
-
const showHash = typeof options.hash === "undefined" ? jsons.every(j => j.hash) : options.hash !== false;
|
39
|
-
jsons.forEach(j => {
|
40
|
-
if(showVersion)
|
41
|
-
delete j.version;
|
42
|
-
});
|
43
|
-
const obj = {
|
44
|
-
errors: jsons.reduce((arr, j) => {
|
45
|
-
return arr.concat(j.errors.map(msg => {
|
46
|
-
return `(${j.name}) ${msg}`;
|
47
|
-
}));
|
48
|
-
}, []),
|
49
|
-
warnings: jsons.reduce((arr, j) => {
|
50
|
-
return arr.concat(j.warnings.map(msg => {
|
51
|
-
return `(${j.name}) ${msg}`;
|
52
|
-
}));
|
53
|
-
}, [])
|
54
|
-
};
|
55
|
-
if(showVersion)
|
56
|
-
obj.version = require("../package.json").version;
|
57
|
-
if(showHash)
|
58
|
-
obj.hash = this.hash;
|
59
|
-
if(options.children !== false)
|
60
|
-
obj.children = jsons;
|
61
|
-
return obj;
|
62
|
-
}
|
63
|
-
|
64
|
-
toString(options) {
|
65
|
-
if(typeof options === "boolean" || typeof options === "string") {
|
66
|
-
options = Stats.presetToOptions(options);
|
67
|
-
} else if(!options) {
|
68
|
-
options = {};
|
69
|
-
}
|
70
|
-
|
71
|
-
const useColors = optionOrFallback(options.colors, false);
|
72
|
-
|
73
|
-
const obj = this.toJson(options, true);
|
74
|
-
|
75
|
-
return Stats.jsonToString(obj, useColors);
|
76
|
-
}
|
77
|
-
}
|
78
|
-
|
79
|
-
module.exports = MultiStats;
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const Stats = require("./Stats");
|
8
|
+
|
9
|
+
const optionOrFallback = (optionValue, fallbackValue) => optionValue !== undefined ? optionValue : fallbackValue;
|
10
|
+
|
11
|
+
class MultiStats {
|
12
|
+
constructor(stats) {
|
13
|
+
this.stats = stats;
|
14
|
+
this.hash = stats.map(stat => stat.hash).join("");
|
15
|
+
}
|
16
|
+
|
17
|
+
hasErrors() {
|
18
|
+
return this.stats.map((stat) => stat.hasErrors()).reduce((a, b) => a || b, false);
|
19
|
+
}
|
20
|
+
|
21
|
+
hasWarnings() {
|
22
|
+
return this.stats.map((stat) => stat.hasWarnings()).reduce((a, b) => a || b, false);
|
23
|
+
}
|
24
|
+
|
25
|
+
toJson(options, forToString) {
|
26
|
+
if(typeof options === "boolean" || typeof options === "string") {
|
27
|
+
options = Stats.presetToOptions(options);
|
28
|
+
} else if(!options) {
|
29
|
+
options = {};
|
30
|
+
}
|
31
|
+
const jsons = this.stats.map((stat, idx) => {
|
32
|
+
const childOptions = Stats.getChildOptions(options, idx);
|
33
|
+
const obj = stat.toJson(childOptions, forToString);
|
34
|
+
obj.name = stat.compilation && stat.compilation.name;
|
35
|
+
return obj;
|
36
|
+
});
|
37
|
+
const showVersion = typeof options.version === "undefined" ? jsons.every(j => j.version) : options.version !== false;
|
38
|
+
const showHash = typeof options.hash === "undefined" ? jsons.every(j => j.hash) : options.hash !== false;
|
39
|
+
jsons.forEach(j => {
|
40
|
+
if(showVersion)
|
41
|
+
delete j.version;
|
42
|
+
});
|
43
|
+
const obj = {
|
44
|
+
errors: jsons.reduce((arr, j) => {
|
45
|
+
return arr.concat(j.errors.map(msg => {
|
46
|
+
return `(${j.name}) ${msg}`;
|
47
|
+
}));
|
48
|
+
}, []),
|
49
|
+
warnings: jsons.reduce((arr, j) => {
|
50
|
+
return arr.concat(j.warnings.map(msg => {
|
51
|
+
return `(${j.name}) ${msg}`;
|
52
|
+
}));
|
53
|
+
}, [])
|
54
|
+
};
|
55
|
+
if(showVersion)
|
56
|
+
obj.version = require("../package.json").version;
|
57
|
+
if(showHash)
|
58
|
+
obj.hash = this.hash;
|
59
|
+
if(options.children !== false)
|
60
|
+
obj.children = jsons;
|
61
|
+
return obj;
|
62
|
+
}
|
63
|
+
|
64
|
+
toString(options) {
|
65
|
+
if(typeof options === "boolean" || typeof options === "string") {
|
66
|
+
options = Stats.presetToOptions(options);
|
67
|
+
} else if(!options) {
|
68
|
+
options = {};
|
69
|
+
}
|
70
|
+
|
71
|
+
const useColors = optionOrFallback(options.colors, false);
|
72
|
+
|
73
|
+
const obj = this.toJson(options, true);
|
74
|
+
|
75
|
+
return Stats.jsonToString(obj, useColors);
|
76
|
+
}
|
77
|
+
}
|
78
|
+
|
79
|
+
module.exports = MultiStats;
|
package/lib/MultiWatching.js
CHANGED
@@ -1,32 +1,32 @@
|
|
1
|
-
/*
|
2
|
-
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
-
Author Tobias Koppers @sokra
|
4
|
-
*/
|
5
|
-
"use strict";
|
6
|
-
|
7
|
-
const asyncLib = require("async");
|
8
|
-
|
9
|
-
class MultiWatching {
|
10
|
-
constructor(watchings, compiler) {
|
11
|
-
this.watchings = watchings;
|
12
|
-
this.compiler = compiler;
|
13
|
-
}
|
14
|
-
|
15
|
-
invalidate() {
|
16
|
-
this.watchings.forEach((watching) => watching.invalidate());
|
17
|
-
}
|
18
|
-
|
19
|
-
close(callback) {
|
20
|
-
if(callback === undefined) callback = () => { /*do nothing*/ };
|
21
|
-
|
22
|
-
asyncLib.forEach(this.watchings, (watching, finishedCallback) => {
|
23
|
-
watching.close(finishedCallback);
|
24
|
-
}, err => {
|
25
|
-
this.compiler.applyPlugins("watch-close");
|
26
|
-
callback(err);
|
27
|
-
});
|
28
|
-
|
29
|
-
}
|
30
|
-
}
|
31
|
-
|
32
|
-
module.exports = MultiWatching;
|
1
|
+
/*
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
3
|
+
Author Tobias Koppers @sokra
|
4
|
+
*/
|
5
|
+
"use strict";
|
6
|
+
|
7
|
+
const asyncLib = require("async");
|
8
|
+
|
9
|
+
class MultiWatching {
|
10
|
+
constructor(watchings, compiler) {
|
11
|
+
this.watchings = watchings;
|
12
|
+
this.compiler = compiler;
|
13
|
+
}
|
14
|
+
|
15
|
+
invalidate() {
|
16
|
+
this.watchings.forEach((watching) => watching.invalidate());
|
17
|
+
}
|
18
|
+
|
19
|
+
close(callback) {
|
20
|
+
if(callback === undefined) callback = () => { /*do nothing*/ };
|
21
|
+
|
22
|
+
asyncLib.forEach(this.watchings, (watching, finishedCallback) => {
|
23
|
+
watching.close(finishedCallback);
|
24
|
+
}, err => {
|
25
|
+
this.compiler.applyPlugins("watch-close");
|
26
|
+
callback(err);
|
27
|
+
});
|
28
|
+
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
module.exports = MultiWatching;
|