in src/loader.js [1719:1783]
ModuleManager.prototype._resolve = function (module) {
var _this = this;
var dependencies = module.dependencies;
if (dependencies) {
for (var i = 0, len = dependencies.length; i < len; i++) {
var dependency = dependencies[i];
if (dependency === RegularDependency.EXPORTS) {
module.exportsPassedIn = true;
module.unresolvedDependenciesCount--;
continue;
}
if (dependency === RegularDependency.MODULE) {
module.unresolvedDependenciesCount--;
continue;
}
if (dependency === RegularDependency.REQUIRE) {
module.unresolvedDependenciesCount--;
continue;
}
var dependencyModule = this._modules2[dependency.id];
if (dependencyModule && dependencyModule.isComplete()) {
if (dependencyModule.error) {
module.onDependencyError(dependencyModule.error);
return;
}
module.unresolvedDependenciesCount--;
continue;
}
if (this._hasDependencyPath(dependency.id, module.id)) {
this._hasDependencyCycle = true;
console.warn('There is a dependency cycle between \'' + this._moduleIdProvider.getStrModuleId(dependency.id) + '\' and \'' + this._moduleIdProvider.getStrModuleId(module.id) + '\'. The cyclic path follows:');
var cyclePath = this._findCyclePath(dependency.id, module.id, 0) || [];
cyclePath.reverse();
cyclePath.push(dependency.id);
console.warn(cyclePath.map(function (id) { return _this._moduleIdProvider.getStrModuleId(id); }).join(' => \n'));
// Break the cycle
module.unresolvedDependenciesCount--;
continue;
}
// record inverse dependency
this._inverseDependencies2[dependency.id] = this._inverseDependencies2[dependency.id] || [];
this._inverseDependencies2[dependency.id].push(module.id);
if (dependency instanceof PluginDependency) {
var plugin = this._modules2[dependency.pluginId];
if (plugin && plugin.isComplete()) {
this._loadPluginDependency(plugin.exports, dependency);
continue;
}
// Record dependency for when the plugin gets loaded
var inversePluginDeps = this._inversePluginDependencies2.get(dependency.pluginId);
if (!inversePluginDeps) {
inversePluginDeps = [];
this._inversePluginDependencies2.set(dependency.pluginId, inversePluginDeps);
}
inversePluginDeps.push(dependency);
this._loadModule(dependency.pluginId);
continue;
}
this._loadModule(dependency.id);
}
}
if (module.unresolvedDependenciesCount === 0) {
this._onModuleComplete(module);
}
};