webpack 2.1.0-beta.21 → 2.1.0-beta.25
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/bin/config-yargs.js +6 -5
- package/bin/convert-argv.js +59 -31
- package/bin/webpack.js +30 -2
- package/lib/APIPlugin.js +19 -16
- package/lib/Chunk.js +1 -1
- package/lib/CommonJsHarmonyMainTemplatePlugin.js +21 -0
- package/lib/CompatibilityPlugin.js +24 -17
- package/lib/Compilation.js +36 -15
- package/lib/Compiler.js +48 -15
- package/lib/ConstPlugin.js +40 -37
- package/lib/DefinePlugin.js +107 -103
- package/lib/DelegatedModule.js +1 -2
- package/lib/Dependency.js +5 -0
- package/lib/DllReferencePlugin.js +41 -15
- package/lib/ExtendedAPIPlugin.js +14 -11
- package/lib/FlagDependencyExportsPlugin.js +102 -0
- package/lib/FlagInitialModulesAsUsedPlugin.js +23 -23
- package/lib/FunctionModuleTemplatePlugin.js +4 -0
- package/lib/HotModuleReplacement.runtime.js +1 -1
- package/lib/HotModuleReplacementPlugin.js +71 -68
- package/lib/LibManifestPlugin.js +1 -2
- package/lib/LibraryTemplatePlugin.js +4 -0
- package/lib/MainTemplate.js +12 -13
- package/lib/Module.js +10 -1
- package/lib/MovedToPluginWarningPlugin.js +3 -1
- package/lib/MultiCompiler.js +81 -7
- package/lib/NodeStuffPlugin.js +97 -86
- package/lib/NormalModule.js +6 -0
- package/lib/NormalModuleFactory.js +87 -34
- package/lib/Parser.js +13 -4
- package/lib/ProvidePlugin.js +30 -27
- package/lib/RequireJsStuffPlugin.js +27 -21
- package/lib/RuleSet.js +369 -0
- package/lib/Stats.js +74 -90
- package/lib/UseStrictPlugin.js +12 -8
- package/lib/WebpackOptionsApply.js +3 -13
- package/lib/WebpackOptionsDefaulter.js +0 -1
- package/lib/WebpackOptionsValidationError.js +186 -0
- package/lib/dependencies/AMDPlugin.js +64 -55
- package/lib/dependencies/CommonJsPlugin.js +55 -45
- package/lib/dependencies/HarmonyExportExpressionDependency.js +6 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +76 -16
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -4
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +6 -4
- package/lib/dependencies/HarmonyModulesHelpers.js +0 -29
- package/lib/dependencies/HarmonyModulesPlugin.js +11 -4
- package/lib/dependencies/RequireContextPlugin.js +12 -5
- package/lib/dependencies/RequireEnsurePlugin.js +17 -10
- package/lib/dependencies/RequireIncludePlugin.js +18 -10
- package/lib/dependencies/SystemPlugin.js +48 -29
- package/lib/node/NodeMainTemplate.runtime.js +2 -2
- package/lib/node/NodeMainTemplateAsync.runtime.js +2 -2
- package/lib/node/NodeSourcePlugin.js +84 -71
- package/lib/optimize/ChunkModuleIdRangePlugin.js +52 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +7 -2
- package/lib/validateWebpackOptions.js +63 -0
- package/lib/webpack.js +9 -6
- package/lib/webworker/WebWorkerMainTemplate.runtime.js +35 -33
- package/package.json +13 -8
- package/schemas/webpackOptionsSchema.json +802 -0
- package/README.md +0 -315
- package/lib/LoadersList.js +0 -110
- package/lib/dependencies/LabeledExportsDependency.js +0 -21
- package/lib/dependencies/LabeledModuleDependency.js +0 -36
- package/lib/dependencies/LabeledModuleDependencyParserPlugin.js +0 -78
- package/lib/dependencies/LabeledModulesPlugin.js +0 -26
@@ -7,16 +7,27 @@ var async = require("async");
|
|
7
7
|
var Tapable = require("tapable");
|
8
8
|
var NormalModule = require("./NormalModule");
|
9
9
|
var RawModule = require("./RawModule");
|
10
|
-
var
|
10
|
+
var Parser = require("./Parser");
|
11
|
+
var RuleSet = require("./RuleSet");
|
12
|
+
|
13
|
+
function loaderToIdent(data) {
|
14
|
+
if(!data.options)
|
15
|
+
return data.loader;
|
16
|
+
if(typeof data.options === "string")
|
17
|
+
return data.loader + "?" + data.options;
|
18
|
+
if(typeof data.options !== "object")
|
19
|
+
throw new Error("loader options must be string or object");
|
20
|
+
if(data.options.ident)
|
21
|
+
return data.loader + "??" + data.options.ident;
|
22
|
+
return data.loader + "?" + JSON.stringify(data.options);
|
23
|
+
}
|
11
24
|
|
12
|
-
function NormalModuleFactory(context, resolvers,
|
25
|
+
function NormalModuleFactory(context, resolvers, options) {
|
13
26
|
Tapable.call(this);
|
14
27
|
this.resolvers = resolvers;
|
15
|
-
this.
|
16
|
-
this.loaders = new LoadersList(options.loaders);
|
17
|
-
this.preLoaders = new LoadersList(options.preLoaders);
|
18
|
-
this.postLoaders = new LoadersList(options.postLoaders);
|
28
|
+
this.ruleSet = new RuleSet(options.rules || options.loaders);
|
19
29
|
this.context = context || "";
|
30
|
+
this.parserCache = {};
|
20
31
|
this.plugin("factory", function() {
|
21
32
|
var _this = this;
|
22
33
|
return function(result, callback) {
|
@@ -77,6 +88,18 @@ function NormalModuleFactory(context, resolvers, parser, options) {
|
|
77
88
|
var noPostAutoLoaders = /^-!/.test(request);
|
78
89
|
var elements = request.replace(/^-?!+/, "").replace(/!!+/g, "!").split("!");
|
79
90
|
var resource = elements.pop();
|
91
|
+
elements = elements.map(function(element) {
|
92
|
+
var idx = element.indexOf("?");
|
93
|
+
var options;
|
94
|
+
if(idx >= 0) {
|
95
|
+
options = element.substr(idx + 1);
|
96
|
+
element = element.substr(0, idx);
|
97
|
+
}
|
98
|
+
return {
|
99
|
+
loader: element,
|
100
|
+
options: options
|
101
|
+
};
|
102
|
+
});
|
80
103
|
|
81
104
|
async.parallel([
|
82
105
|
function(callback) {
|
@@ -101,46 +124,53 @@ function NormalModuleFactory(context, resolvers, parser, options) {
|
|
101
124
|
"ignored " + context + " " + request,
|
102
125
|
request + " (ignored)")); // ignored
|
103
126
|
|
104
|
-
var userRequest = loaders.concat([resource]).join("!");
|
127
|
+
var userRequest = loaders.map(loaderToIdent).concat([resource]).join("!");
|
105
128
|
|
106
129
|
var resourcePath = resource;
|
107
130
|
var queryIndex = resourcePath.indexOf("?");
|
108
131
|
if(queryIndex >= 0)
|
109
132
|
resourcePath = resourcePath.substr(0, queryIndex);
|
110
133
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
134
|
+
var result = _this.ruleSet.exec({
|
135
|
+
resource: resourcePath,
|
136
|
+
issuer: contextInfo.issuer
|
137
|
+
});
|
138
|
+
var settings = {};
|
139
|
+
var useLoadersPost = [];
|
140
|
+
var useLoaders = [];
|
141
|
+
var useLoadersPre = [];
|
142
|
+
result.forEach(function(r) {
|
143
|
+
if(r.type === "use") {
|
144
|
+
if(r.enforce === "post" && !noPostAutoLoaders && !noPrePostAutoLoaders)
|
145
|
+
useLoadersPost.push(r.value);
|
146
|
+
else if(r.enforce === "pre" && !noPrePostAutoLoaders)
|
147
|
+
useLoadersPre.push(r.value);
|
148
|
+
else if(!r.enforce && !noAutoLoaders && !noPrePostAutoLoaders)
|
149
|
+
useLoaders.push(r.value);
|
150
|
+
} else {
|
151
|
+
settings[r.type] = r.value;
|
152
|
+
}
|
153
|
+
});
|
154
|
+
async.parallel([
|
155
|
+
_this.resolveRequestArray.bind(_this, contextInfo, _this.context, useLoadersPost, _this.resolvers.loader),
|
156
|
+
_this.resolveRequestArray.bind(_this, contextInfo, _this.context, useLoaders, _this.resolvers.loader),
|
157
|
+
_this.resolveRequestArray.bind(_this, contextInfo, _this.context, useLoadersPre, _this.resolvers.loader)
|
158
|
+
], function(err, results) {
|
159
|
+
if(err) return callback(err);
|
160
|
+
loaders = results[0].concat(loaders).concat(results[1]).concat(results[2]);
|
161
|
+
onDoneResolving();
|
162
|
+
});
|
133
163
|
|
134
164
|
function onDoneResolving() {
|
135
165
|
callback(null, {
|
136
166
|
context: context,
|
137
|
-
request: loaders.concat([resource]).join("!"),
|
167
|
+
request: loaders.map(loaderToIdent).concat([resource]).join("!"),
|
138
168
|
dependencies: data.dependencies,
|
139
169
|
userRequest: userRequest,
|
140
170
|
rawRequest: request,
|
141
171
|
loaders: loaders,
|
142
172
|
resource: resource,
|
143
|
-
parser: _this.parser
|
173
|
+
parser: _this.getParser(settings.parser)
|
144
174
|
});
|
145
175
|
}
|
146
176
|
});
|
@@ -182,8 +212,31 @@ NormalModuleFactory.prototype.create = function(data, callback) {
|
|
182
212
|
NormalModuleFactory.prototype.resolveRequestArray = function resolveRequestArray(contextInfo, context, array, resolver, callback) {
|
183
213
|
if(array.length === 0) return callback(null, []);
|
184
214
|
async.map(array, function(item, callback) {
|
185
|
-
|
186
|
-
return callback(
|
187
|
-
|
215
|
+
resolver.resolve(contextInfo, context, item.loader, function(err, result) {
|
216
|
+
if(err) return callback(err);
|
217
|
+
return callback(null, Object.assign({}, item, {
|
218
|
+
loader: result
|
219
|
+
}));
|
220
|
+
});
|
188
221
|
}, callback);
|
189
222
|
};
|
223
|
+
|
224
|
+
NormalModuleFactory.prototype.getParser = function getParser(parserOptions) {
|
225
|
+
var ident = "null"
|
226
|
+
if(parserOptions) {
|
227
|
+
if(parserOptions.ident)
|
228
|
+
ident = parserOptions.ident;
|
229
|
+
else
|
230
|
+
ident = JSON.stringify(parserOptions);
|
231
|
+
}
|
232
|
+
var parser = this.parserCache[ident];
|
233
|
+
if(parser)
|
234
|
+
return parser;
|
235
|
+
return this.parserCache[ident] = this.createParser(parserOptions);
|
236
|
+
};
|
237
|
+
|
238
|
+
NormalModuleFactory.prototype.createParser = function createParser(parserOptions) {
|
239
|
+
var parser = new Parser();
|
240
|
+
this.applyPlugins("parser", parser, parserOptions || {});
|
241
|
+
return parser;
|
242
|
+
};
|
package/lib/Parser.js
CHANGED
@@ -817,7 +817,13 @@ Parser.prototype.walkCallExpression = function walkCallExpression(expression) {
|
|
817
817
|
this.walkExpression(functionExpression.body);
|
818
818
|
}.bind(this));
|
819
819
|
}
|
820
|
-
if(expression.callee.type === "MemberExpression" &&
|
820
|
+
if(expression.callee.type === "MemberExpression" &&
|
821
|
+
expression.callee.object.type === "FunctionExpression" &&
|
822
|
+
!expression.callee.computed &&
|
823
|
+
(["call", "bind"]).indexOf(expression.callee.property.name) >= 0 &&
|
824
|
+
expression.arguments &&
|
825
|
+
expression.arguments.length > 1
|
826
|
+
) {
|
821
827
|
// (function(...) { }.call/bind(?, ...))
|
822
828
|
walkIIFE.call(this, expression.callee.object, expression.arguments.slice(1));
|
823
829
|
this.walkExpression(expression.arguments[0]);
|
@@ -1039,10 +1045,12 @@ var POSSIBLE_AST_OPTIONS = [{
|
|
1039
1045
|
}]
|
1040
1046
|
|
1041
1047
|
Parser.prototype.parse = function parse(source, initialState) {
|
1042
|
-
var ast;
|
1048
|
+
var ast, comments = [];
|
1043
1049
|
for(var i = 0; i < POSSIBLE_AST_OPTIONS.length; i++) {
|
1044
1050
|
if(!ast) {
|
1045
1051
|
try {
|
1052
|
+
comments.length = 0;
|
1053
|
+
POSSIBLE_AST_OPTIONS[i].onComment = comments;
|
1046
1054
|
ast = acorn.parse(source, POSSIBLE_AST_OPTIONS[i]);
|
1047
1055
|
} catch(e) {
|
1048
1056
|
// ignore the error
|
@@ -1055,7 +1063,8 @@ Parser.prototype.parse = function parse(source, initialState) {
|
|
1055
1063
|
ranges: true,
|
1056
1064
|
locations: true,
|
1057
1065
|
ecmaVersion: 6,
|
1058
|
-
sourceType: "module"
|
1066
|
+
sourceType: "module",
|
1067
|
+
onComment: comments
|
1059
1068
|
});
|
1060
1069
|
}
|
1061
1070
|
if(!ast || typeof ast !== "object")
|
@@ -1068,7 +1077,7 @@ Parser.prototype.parse = function parse(source, initialState) {
|
|
1068
1077
|
renames: {}
|
1069
1078
|
};
|
1070
1079
|
var state = this.state = initialState || {};
|
1071
|
-
if(this.applyPluginsBailResult("program", ast) === undefined)
|
1080
|
+
if(this.applyPluginsBailResult("program", ast, comments) === undefined)
|
1072
1081
|
this.walkStatements(ast.body);
|
1073
1082
|
this.scope = oldScope;
|
1074
1083
|
this.state = oldState;
|
package/lib/ProvidePlugin.js
CHANGED
@@ -12,37 +12,40 @@ function ProvidePlugin(definitions) {
|
|
12
12
|
}
|
13
13
|
module.exports = ProvidePlugin;
|
14
14
|
ProvidePlugin.prototype.apply = function(compiler) {
|
15
|
-
|
15
|
+
var definitions = this.definitions;
|
16
|
+
compiler.plugin("compilation", function(compilation, params) {
|
16
17
|
compilation.dependencyFactories.set(ConstDependency, new NullFactory());
|
17
18
|
compilation.dependencyTemplates.set(ConstDependency, new ConstDependency.Template());
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
19
|
+
params.normalModuleFactory.plugin("parser", function(parser, parserOptions) {
|
20
|
+
Object.keys(definitions).forEach(function(name) {
|
21
|
+
var request = definitions[name];
|
22
|
+
var splittedName = name.split(".");
|
23
|
+
if(splittedName.length > 0) {
|
24
|
+
splittedName.slice(1).forEach(function(_, i) {
|
25
|
+
var name = splittedName.slice(0, i + 1).join(".");
|
26
|
+
parser.plugin("can-rename " + name, function() {
|
27
|
+
return true;
|
28
|
+
});
|
29
|
+
});
|
30
|
+
}
|
31
|
+
parser.plugin("expression " + name, function(expr) {
|
32
|
+
var nameIdentifier = name;
|
33
|
+
var scopedName = name.indexOf(".") >= 0;
|
34
|
+
if(scopedName) {
|
35
|
+
nameIdentifier = "__webpack_provided_" + name.replace(/\./g, "_dot_");
|
36
|
+
}
|
37
|
+
if(!ModuleParserHelpers.addParsedVariable(this, nameIdentifier, "require(" + JSON.stringify(request) + ")")) {
|
38
|
+
return false;
|
39
|
+
}
|
40
|
+
if(scopedName) {
|
41
|
+
nameIdentifier = "__webpack_provided_" + name.replace(/\./g, "_dot_");
|
42
|
+
var dep = new ConstDependency(nameIdentifier, expr.range);
|
43
|
+
dep.loc = expr.loc;
|
44
|
+
this.state.current.addDependency(dep);
|
45
|
+
}
|
26
46
|
return true;
|
27
47
|
});
|
28
48
|
});
|
29
|
-
}
|
30
|
-
compiler.parser.plugin("expression " + name, function(expr) {
|
31
|
-
var nameIdentifier = name;
|
32
|
-
var scopedName = name.indexOf(".") >= 0;
|
33
|
-
if(scopedName) {
|
34
|
-
nameIdentifier = "__webpack_provided_" + name.replace(/\./g, "_dot_");
|
35
|
-
}
|
36
|
-
if(!ModuleParserHelpers.addParsedVariable(this, nameIdentifier, "require(" + JSON.stringify(request) + ")")) {
|
37
|
-
return false;
|
38
|
-
}
|
39
|
-
if(scopedName) {
|
40
|
-
nameIdentifier = "__webpack_provided_" + name.replace(/\./g, "_dot_");
|
41
|
-
var dep = new ConstDependency(nameIdentifier, expr.range);
|
42
|
-
dep.loc = expr.loc;
|
43
|
-
this.state.current.addDependency(dep);
|
44
|
-
}
|
45
|
-
return true;
|
46
49
|
});
|
47
|
-
}
|
50
|
+
});
|
48
51
|
};
|
@@ -9,30 +9,36 @@ var NullFactory = require("./NullFactory");
|
|
9
9
|
function RequireJsStuffPlugin() {}
|
10
10
|
module.exports = RequireJsStuffPlugin;
|
11
11
|
RequireJsStuffPlugin.prototype.apply = function(compiler) {
|
12
|
-
compiler.plugin("compilation", function(compilation) {
|
12
|
+
compiler.plugin("compilation", function(compilation, params) {
|
13
13
|
compilation.dependencyFactories.set(ConstDependency, new NullFactory());
|
14
14
|
compilation.dependencyTemplates.set(ConstDependency, new ConstDependency.Template());
|
15
|
-
|
15
|
+
params.normalModuleFactory.plugin("parser", function(parser, parserOptions) {
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
dep.loc = expr.loc;
|
20
|
-
this.state.current.addDependency(dep);
|
21
|
-
return true;
|
22
|
-
}
|
23
|
-
compiler.parser.plugin("call require.config", remove);
|
24
|
-
compiler.parser.plugin("call requirejs.config", remove);
|
17
|
+
if(typeof parserOptions.requireJs !== "undefined" && !parserOptions.requireJs)
|
18
|
+
return;
|
25
19
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
20
|
+
function remove(expr) {
|
21
|
+
var dep = new ConstDependency(";", expr.range);
|
22
|
+
dep.loc = expr.loc;
|
23
|
+
this.state.current.addDependency(dep);
|
24
|
+
return true;
|
25
|
+
}
|
26
|
+
parser.plugin("call require.config", remove);
|
27
|
+
parser.plugin("call requirejs.config", remove);
|
28
|
+
|
29
|
+
parser.plugin("expression require.version", function(expr) {
|
30
|
+
var dep = new ConstDependency(JSON.stringify("0.0.0"), expr.range);
|
31
|
+
dep.loc = expr.loc;
|
32
|
+
this.state.current.addDependency(dep);
|
33
|
+
return true;
|
34
|
+
});
|
35
|
+
parser.plugin("expression requirejs.onError", function(expr) {
|
36
|
+
var dep = new ConstDependency(JSON.stringify("__webpack_require__.oe"), expr.range);
|
37
|
+
dep.loc = expr.loc;
|
38
|
+
this.state.current.addDependency(dep);
|
39
|
+
return true;
|
40
|
+
});
|
41
|
+
});
|
37
42
|
});
|
43
|
+
|
38
44
|
};
|