Skip to content

Commit dc69f23

Browse files
committed
fixes webpack#65
1 parent a0b4d5b commit dc69f23

File tree

5 files changed

+33
-9
lines changed

5 files changed

+33
-9
lines changed

lib/Compilation.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ var Parser = require("./Parser");
99
var Dependency = require("./Dependency");
1010
var EntryModuleNotFoundError = require("./EntryModuleNotFoundError");
1111
var ModuleNotFoundError = require("./ModuleNotFoundError");
12+
var CriticalDependenciesWarning = require("./CriticalDependenciesWarning");
1213
var Module = require("./Module");
1314
var ArrayMap = require("./ArrayMap");
1415
var Chunk = require("./Chunk");
@@ -20,10 +21,9 @@ function Compilation(compiler) {
2021
this.mainTemplate = compiler.mainTemplate;
2122
this.chunkTemplate = compiler.chunkTemplate;
2223
this.moduleTemplate = compiler.moduleTemplate;
23-
this.options = compiler.options;
2424
this.resolvers = compiler.resolvers;
2525
this.inputFileSystem = compiler.inputFileSystem;
26-
var options = compiler.options;
26+
var options = this.options = compiler.options;
2727
this.outputOptions = options && options.output;
2828
this.bail = options && options.bail;
2929
this.entries = [];
@@ -116,6 +116,11 @@ Compilation.prototype.processModuleDependencies = function(module, callback) {
116116
}
117117
async.forEach(factories, function(item, callback) {
118118
var dependencies = item[1];
119+
var criticalDependencies = dependencies.filter(function(d) { return !!d.critical });
120+
if(criticalDependencies.length > 0) {
121+
this.warnings.push(new CriticalDependenciesWarning(module, criticalDependencies));
122+
}
123+
119124
var errorAndCallback = function errorAndCallback(err) {
120125
err.dependencies = dependencies;
121126
err.origin = module;
@@ -132,13 +137,13 @@ Compilation.prototype.processModuleDependencies = function(module, callback) {
132137
var factory = item[0];
133138
factory.create(module.context, dependencies[0], function(err, dependantModule) {
134139
function isOptional() {
135-
return dependencies.filter(function(d) { return !d.optional }).length > 0;
140+
return dependencies.filter(function(d) { return !d.optional }).length == 0;
136141
}
137142
function errorOrWarningAndCallback(err) {
138143
if(isOptional())
139-
return errorAndCallback(err);
140-
else
141144
return warningAndCallback(err);
145+
else
146+
return errorAndCallback(err);
142147
}
143148
if(err) return errorOrWarningAndCallback(new ModuleNotFoundError(module, err));
144149
if(!dependantModule) return callback();

lib/CriticalDependenciesWarning.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
MIT License http://www.opensource.org/licenses/mit-license.php
3+
Author Tobias Koppers @sokra
4+
*/
5+
function CriticalDependenciesWarning(module, dependencies) {
6+
Error.call(this);
7+
Error.captureStackTrace(this, CriticalDependenciesWarning);
8+
this.name = "CriticalDependenciesWarning";
9+
this.message = "Critical dependencies.";
10+
this.dependencies = dependencies;
11+
this.origin = this.module = module;
12+
}
13+
module.exports = CriticalDependenciesWarning;
14+
15+
CriticalDependenciesWarning.prototype = Object.create(Error.prototype);

lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ module.exports = AbstractPlugin.create({
111111
}
112112
},
113113
"call require:amd:context": function(expr, param) {
114-
var dep = ContextDependencyHelpers.create(AMDRequireContextDependency, param.range, param);
114+
var dep = ContextDependencyHelpers.create(AMDRequireContextDependency, param.range, param, expr);
115115
if(!dep) return;
116116
dep.loc = expr.loc;
117117
dep.optional = !!this.scope.inTry;

lib/dependencies/CommonJsRequireDependencyParserPlugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ module.exports = AbstractPlugin.create({
5050
}
5151
},
5252
"call require:commonjs:context": function(expr, param) {
53-
var dep = ContextDependencyHelpers.create(CommonJsRequireContextDependency, expr.range, param);
53+
var dep = ContextDependencyHelpers.create(CommonJsRequireContextDependency, expr.range, param, expr);
5454
if(!dep) return;
5555
dep.loc = expr.loc;
5656
dep.optional = !!this.scope.inTry;

lib/dependencies/ContextDependencyHelpers.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55
var ContextDependencyHelpers = exports;
66

7-
ContextDependencyHelpers.create = function(Dep, range, param) {
7+
ContextDependencyHelpers.create = function(Dep, range, param, expr) {
88
if(param.isWrapped() && param.prefix.isString()) {
99
var prefix = param.prefix.string;
1010
var postfix = param.postfix.isString() ? param.postfix.string : "";
@@ -21,9 +21,13 @@ ContextDependencyHelpers.create = function(Dep, range, param) {
2121
".*" +
2222
postfix.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + "$");
2323
var dep = new Dep(context, true, regExp, range, valueRange);
24+
dep.loc = expr.loc;
2425
dep.prepend = prefix;
2526
return dep;
2627
} else {
27-
return new Dep(".", true, /^\.\/.*$/, range, param.range);
28+
var dep = new Dep(".", true, /^\.\/.*$/, range, param.range);
29+
dep.loc = expr.loc;
30+
dep.critical = true;
31+
return dep;
2832
}
2933
};

0 commit comments

Comments
 (0)