This commit is contained in:
Tobias Koppers 2013-02-13 14:42:34 +01:00
parent a0b4d5bd5c
commit dc69f23de4
5 changed files with 33 additions and 9 deletions

View File

@ -9,6 +9,7 @@ var Parser = require("./Parser");
var Dependency = require("./Dependency");
var EntryModuleNotFoundError = require("./EntryModuleNotFoundError");
var ModuleNotFoundError = require("./ModuleNotFoundError");
var CriticalDependenciesWarning = require("./CriticalDependenciesWarning");
var Module = require("./Module");
var ArrayMap = require("./ArrayMap");
var Chunk = require("./Chunk");
@ -20,10 +21,9 @@ function Compilation(compiler) {
this.mainTemplate = compiler.mainTemplate;
this.chunkTemplate = compiler.chunkTemplate;
this.moduleTemplate = compiler.moduleTemplate;
this.options = compiler.options;
this.resolvers = compiler.resolvers;
this.inputFileSystem = compiler.inputFileSystem;
var options = compiler.options;
var options = this.options = compiler.options;
this.outputOptions = options && options.output;
this.bail = options && options.bail;
this.entries = [];
@ -116,6 +116,11 @@ Compilation.prototype.processModuleDependencies = function(module, callback) {
}
async.forEach(factories, function(item, callback) {
var dependencies = item[1];
var criticalDependencies = dependencies.filter(function(d) { return !!d.critical });
if(criticalDependencies.length > 0) {
this.warnings.push(new CriticalDependenciesWarning(module, criticalDependencies));
}
var errorAndCallback = function errorAndCallback(err) {
err.dependencies = dependencies;
err.origin = module;
@ -132,13 +137,13 @@ Compilation.prototype.processModuleDependencies = function(module, callback) {
var factory = item[0];
factory.create(module.context, dependencies[0], function(err, dependantModule) {
function isOptional() {
return dependencies.filter(function(d) { return !d.optional }).length > 0;
return dependencies.filter(function(d) { return !d.optional }).length == 0;
}
function errorOrWarningAndCallback(err) {
if(isOptional())
return errorAndCallback(err);
else
return warningAndCallback(err);
else
return errorAndCallback(err);
}
if(err) return errorOrWarningAndCallback(new ModuleNotFoundError(module, err));
if(!dependantModule) return callback();

View File

@ -0,0 +1,15 @@
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
function CriticalDependenciesWarning(module, dependencies) {
Error.call(this);
Error.captureStackTrace(this, CriticalDependenciesWarning);
this.name = "CriticalDependenciesWarning";
this.message = "Critical dependencies.";
this.dependencies = dependencies;
this.origin = this.module = module;
}
module.exports = CriticalDependenciesWarning;
CriticalDependenciesWarning.prototype = Object.create(Error.prototype);

View File

@ -111,7 +111,7 @@ module.exports = AbstractPlugin.create({
}
},
"call require:amd:context": function(expr, param) {
var dep = ContextDependencyHelpers.create(AMDRequireContextDependency, param.range, param);
var dep = ContextDependencyHelpers.create(AMDRequireContextDependency, param.range, param, expr);
if(!dep) return;
dep.loc = expr.loc;
dep.optional = !!this.scope.inTry;

View File

@ -50,7 +50,7 @@ module.exports = AbstractPlugin.create({
}
},
"call require:commonjs:context": function(expr, param) {
var dep = ContextDependencyHelpers.create(CommonJsRequireContextDependency, expr.range, param);
var dep = ContextDependencyHelpers.create(CommonJsRequireContextDependency, expr.range, param, expr);
if(!dep) return;
dep.loc = expr.loc;
dep.optional = !!this.scope.inTry;

View File

@ -4,7 +4,7 @@
*/
var ContextDependencyHelpers = exports;
ContextDependencyHelpers.create = function(Dep, range, param) {
ContextDependencyHelpers.create = function(Dep, range, param, expr) {
if(param.isWrapped() && param.prefix.isString()) {
var prefix = param.prefix.string;
var postfix = param.postfix.isString() ? param.postfix.string : "";
@ -21,9 +21,13 @@ ContextDependencyHelpers.create = function(Dep, range, param) {
".*" +
postfix.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + "$");
var dep = new Dep(context, true, regExp, range, valueRange);
dep.loc = expr.loc;
dep.prepend = prefix;
return dep;
} else {
return new Dep(".", true, /^\.\/.*$/, range, param.range);
var dep = new Dep(".", true, /^\.\/.*$/, range, param.range);
dep.loc = expr.loc;
dep.critical = true;
return dep;
}
};