in src/core/moduleManager.ts [937:1015]
private _onModuleComplete(module: Module): void {
let recorder = this.getRecorder();
if (module.isComplete()) {
// already done
return;
}
let dependencies = module.dependencies;
let dependenciesValues: any[] = [];
if (dependencies) {
for (let i = 0, len = dependencies.length; i < len; i++) {
let dependency = dependencies[i];
if (dependency === RegularDependency.EXPORTS) {
dependenciesValues[i] = module.exports;
continue;
}
if (dependency === RegularDependency.MODULE) {
dependenciesValues[i] = {
id: module.strId,
config: () => {
return this._config.getConfigForModule(module.strId);
}
};
continue;
}
if (dependency === RegularDependency.REQUIRE) {
dependenciesValues[i] = this._createRequire(module.moduleIdResolver!);
continue;
}
let dependencyModule = this._modules2[dependency.id];
if (dependencyModule) {
dependenciesValues[i] = dependencyModule.exports;
continue;
}
dependenciesValues[i] = null;
}
}
const inversedependenciesProvider = (moduleId: number) => {
return (this._inverseDependencies2[moduleId] || []).map((intModuleId) => this._moduleIdProvider.getStrModuleId(intModuleId));
}
module.complete(recorder, this._config, dependenciesValues, inversedependenciesProvider);
// Fetch and clear inverse dependencies
let inverseDeps = this._inverseDependencies2[module.id];
this._inverseDependencies2[module.id] = null;
if (inverseDeps) {
// Resolve one inverse dependency at a time, always
// on the lookout for a completed module.
for (let i = 0, len = inverseDeps.length; i < len; i++) {
let inverseDependencyId = inverseDeps[i];
let inverseDependency = this._modules2[inverseDependencyId];
inverseDependency.unresolvedDependenciesCount--;
if (inverseDependency.unresolvedDependenciesCount === 0) {
this._onModuleComplete(inverseDependency);
}
}
}
let inversePluginDeps = this._inversePluginDependencies2.get(module.id);
if (inversePluginDeps) {
// This module is used as a plugin at least once
// Fetch and clear these inverse plugin dependencies
this._inversePluginDependencies2.delete(module.id);
// Resolve plugin dependencies one at a time
for (let i = 0, len = inversePluginDeps.length; i < len; i++) {
this._loadPluginDependency(module.exports, inversePluginDeps[i]);
}
}
}