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);
    }
Example #2
0
    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;
}