function resolveRequire(path, fromDir, fromFile, options, optimizerContext, callback) { equal(typeof callback, 'function', '"callback" function expected'); var parsedRequire = parseRequire(path); // Normalize the path by making sure the path separator is always forward slash // (normalize does nothing on non-Windows platform) path = _normalizePath(parsedRequire.path); var dependencyType = parsedRequire.type; var optimizerJsonPath = nodePath.join(fromDir, 'optimizer.json'); var remap; if (optimizerContext.cachingFs.existsSync(optimizerJsonPath)) { var optimizerPackage = optimizerContext.readPackageFile(optimizerJsonPath); remap = optimizerPackage.getRequireRemap(optimizerContext); } if (remap) { if (options.remap) { remap = extend({}, remap); extend(remap, options.remap); options.remap = remap; } else { options.remap = remap; } } var resolved; try { resolved = resolver.resolveRequire(path, fromDir, options); } catch(e) { if (e.moduleNotFound || e.code === 'ENOENT') { // Check if it is a builtin module ("path", etc.) if (path && !dependencyType && builtins[path]) { return callback(null, builtins[path]); } else { return callback(createError(new Error('Unable to resolve required module "' + path + '" (fromDir "' + fromDir + '") referenced in "' + fromFile + '". Exception: ' + e), e)); } } else { // Uncaught exception throw e; } } resolved = extend({}, resolved); resolved.dependencyType = dependencyType; if (resolved.isDir && !resolved.main) { return callback( new Error( 'require(' + JSON.stringify(path) + ') resolved to a directory at path "' + resolved.filePath + '" which does not have a main file (referenced in "' + fromFile + '")')); } return callback(null, resolved); }
Object.keys(globals).forEach(function(moduleName) { var varName = globals[moduleName]; var resolved; try { resolved = resolveRequire(moduleName, config.rootDir); } catch(e) { if (e.moduleNotFound) { if (config.globals && config.globals.hasOwnProperty(moduleName)) { throw e; } } else { throw e; } } delete globals[moduleName]; if (resolved) { resolved = resolved.main ? resolved.main.filePath : resolved.filePath; globals[resolved] = varName; } });
function resolveBuiltinRequire(name) { var resolved = resolveRequire(name, __dirname, { makeRoot: true }); extend({}, resolved); resolved.builtin = true; return resolved; }