mirror of https://github.com/webpack/webpack.git
parent
10c45eb34e
commit
8131061c8e
|
|
@ -567,7 +567,7 @@ Compilation.prototype.processDependenciesBlockForChunk = function processDepende
|
|||
this.processDependenciesBlockForChunk(b, c);
|
||||
}, this);
|
||||
function iteratorDependency(d) {
|
||||
if(!d.module) {
|
||||
if(!d.module || d.weak) {
|
||||
return;
|
||||
}
|
||||
if(d.module.error) {
|
||||
|
|
|
|||
|
|
@ -23,6 +23,17 @@ function CommonJsPlugin(options) {
|
|||
module.exports = CommonJsPlugin;
|
||||
|
||||
CommonJsPlugin.prototype.apply = function(compiler) {
|
||||
function setTypeof(expr, value) {
|
||||
compiler.parser.plugin("evaluate typeof " + expr, function(expr) {
|
||||
return new BasicEvaluatedExpression().setString(value).setRange(expr.range);
|
||||
});
|
||||
compiler.parser.plugin("typeof " + expr, function(expr) {
|
||||
var dep = new ConstDependency(JSON.stringify(value), expr.range);
|
||||
dep.loc = expr.loc;
|
||||
this.state.current.addDependency(dep);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
compiler.plugin("compilation", function(compilation, params) {
|
||||
var normalModuleFactory = params.normalModuleFactory;
|
||||
var contextModuleFactory = params.contextModuleFactory;
|
||||
|
|
@ -45,9 +56,9 @@ CommonJsPlugin.prototype.apply = function(compiler) {
|
|||
compilation.dependencyFactories.set(RequireHeaderDependency, new NullFactory());
|
||||
compilation.dependencyTemplates.set(RequireHeaderDependency, new RequireHeaderDependency.Template());
|
||||
});
|
||||
compiler.parser.plugin("evaluate typeof require", function(expr) {
|
||||
return new BasicEvaluatedExpression().setString("function").setRange(expr.range);
|
||||
});
|
||||
setTypeof("require", "function");
|
||||
setTypeof("require.resolve", "function");
|
||||
setTypeof("require.resolveWeak", "function");
|
||||
compiler.parser.plugin("evaluate typeof module", function(expr) {
|
||||
return new BasicEvaluatedExpression().setString("object").setRange(expr.range);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ function ModuleHotAcceptDependency(request, range) {
|
|||
ModuleDependency.call(this, request);
|
||||
this.Class = ModuleHotAcceptDependency;
|
||||
this.range = range;
|
||||
this.weak = true;
|
||||
}
|
||||
module.exports = ModuleHotAcceptDependency;
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ function ModuleHotDeclineDependency(request, range) {
|
|||
ModuleDependency.call(this, request);
|
||||
this.Class = ModuleHotDeclineDependency;
|
||||
this.range = range;
|
||||
this.weak = true;
|
||||
}
|
||||
module.exports = ModuleHotDeclineDependency;
|
||||
|
||||
|
|
|
|||
|
|
@ -16,40 +16,48 @@ module.exports = RequireResolveDependencyParserPlugin;
|
|||
RequireResolveDependencyParserPlugin.prototype.apply = function(parser) {
|
||||
var options = this.options;
|
||||
parser.plugin("call require.resolve", function(expr) {
|
||||
return this.applyPluginsBailResult("call require.resolve(Weak)", expr, false)
|
||||
});
|
||||
parser.plugin("call require.resolveWeak", function(expr) {
|
||||
return this.applyPluginsBailResult("call require.resolve(Weak)", expr, true)
|
||||
});
|
||||
parser.plugin("call require.resolve(Weak)", function(expr, weak) {
|
||||
if(expr.arguments.length !== 1) return;
|
||||
var param = this.evaluateExpression(expr.arguments[0]);
|
||||
if(param.isConditional()) {
|
||||
param.options.forEach(function(option) {
|
||||
var result = this.applyPluginsBailResult("call require.resolve:item", expr, option);
|
||||
var result = this.applyPluginsBailResult("call require.resolve(Weak):item", expr, option, weak);
|
||||
if(result === undefined) {
|
||||
this.applyPluginsBailResult("call require.resolve:context", expr, option);
|
||||
this.applyPluginsBailResult("call require.resolve(Weak):context", expr, option, weak);
|
||||
}
|
||||
}, this);
|
||||
this.state.current.addDependency(new RequireResolveHeaderDependency(expr.callee.range));
|
||||
return true;
|
||||
} else {
|
||||
var result = this.applyPluginsBailResult("call require.resolve:item", expr, param);
|
||||
var result = this.applyPluginsBailResult("call require.resolve(Weak):item", expr, param, weak);
|
||||
if(result === undefined) {
|
||||
this.applyPluginsBailResult("call require.resolve:context", expr, param);
|
||||
this.applyPluginsBailResult("call require.resolve(Weak):context", expr, param, weak);
|
||||
}
|
||||
this.state.current.addDependency(new RequireResolveHeaderDependency(expr.callee.range));
|
||||
return true;
|
||||
}
|
||||
});
|
||||
parser.plugin("call require.resolve:item", function(expr, param) {
|
||||
parser.plugin("call require.resolve(Weak):item", function(expr, param, weak) {
|
||||
if(param.isString()) {
|
||||
var dep = new RequireResolveDependency(param.string, param.range);
|
||||
dep.loc = expr.loc;
|
||||
dep.optional = !!this.scope.inTry;
|
||||
dep.weak = weak;
|
||||
this.state.current.addDependency(dep);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
parser.plugin("call require.resolve:context", function(expr, param) {
|
||||
parser.plugin("call require.resolve(Weak):context", function(expr, param, weak) {
|
||||
var dep = ContextDependencyHelpers.create(RequireResolveContextDependency, param.range, param, expr, options);
|
||||
if(!dep) return;
|
||||
dep.loc = expr.loc;
|
||||
dep.optional = !!this.scope.inTry;
|
||||
dep.weak = weak;
|
||||
this.state.current.addDependency(dep);
|
||||
return true;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
it("should not include a module with a weak dependency", function() {
|
||||
var a = !!__webpack_modules__[require.resolveWeak("./a")];
|
||||
var b = !!__webpack_modules__[require.resolve("./b")];
|
||||
var c = !!__webpack_modules__[require.resolveWeak("./c")];
|
||||
var d = !!__webpack_modules__[require.resolveWeak("./d")];
|
||||
require(["./c"]);
|
||||
require("./d");
|
||||
|
||||
a.should.be.eql(false);
|
||||
b.should.be.eql(true);
|
||||
c.should.be.eql(false);
|
||||
d.should.be.eql(true);
|
||||
});
|
||||
Loading…
Reference in New Issue