react / react-0.13.3 / examples / basic-commonjs / node_modules / browserify / node_modules / umd / node_modules / rfile / node_modules / resolve / lib / sync.js
80762 viewsvar core = require('./core');1var fs = require('fs');2var path = require('path');34module.exports = function (x, opts) {5if (core[x]) return x;67if (!opts) opts = {};8var isFile = opts.isFile || function (file) {9try { var stat = fs.statSync(file) }10catch (err) { if (err && err.code === 'ENOENT') return false }11return stat.isFile() || stat.isFIFO();12};13var readFileSync = opts.readFileSync || fs.readFileSync;1415var extensions = opts.extensions || [ '.js' ];16var y = opts.basedir17|| path.dirname(require.cache[__filename].parent.filename)18;1920opts.paths = opts.paths || [];2122if (x.match(/^(?:\.\.?\/|\/|([A-Za-z]:)?\\)/)) {23var m = loadAsFileSync(path.resolve(y, x))24|| loadAsDirectorySync(path.resolve(y, x));25if (m) return m;26} else {27var n = loadNodeModulesSync(x, y);28if (n) return n;29}3031throw new Error("Cannot find module '" + x + "'");3233function loadAsFileSync (x) {34if (isFile(x)) {35return x;36}3738for (var i = 0; i < extensions.length; i++) {39var file = x + extensions[i];40if (isFile(file)) {41return file;42}43}44}4546function loadAsDirectorySync (x) {47var pkgfile = path.join(x, '/package.json');48if (isFile(pkgfile)) {49var body = readFileSync(pkgfile, 'utf8');50try {51var pkg = JSON.parse(body);52if (opts.packageFilter) {53pkg = opts.packageFilter(pkg, x);54}5556if (pkg.main) {57var m = loadAsFileSync(path.resolve(x, pkg.main));58if (m) return m;59var n = loadAsDirectorySync(path.resolve(x, pkg.main));60if (n) return n;61}62}63catch (err) {}64}6566return loadAsFileSync(path.join( x, '/index'));67}6869function loadNodeModulesSync (x, start) {70var dirs = nodeModulesPathsSync(start);71for (var i = 0; i < dirs.length; i++) {72var dir = dirs[i];73var m = loadAsFileSync(path.join( dir, '/', x));74if (m) return m;75var n = loadAsDirectorySync(path.join( dir, '/', x ));76if (n) return n;77}78}7980function nodeModulesPathsSync (start) {81var splitRe = process.platform === 'win32' ? /[\/\\]/ : /\/+/;82var parts = start.split(splitRe);8384var dirs = [];85for (var i = parts.length - 1; i >= 0; i--) {86if (parts[i] === 'node_modules') continue;87var dir = path.join(88path.join.apply(path, parts.slice(0, i + 1)),89'node_modules'90);91if (!parts[0].match(/([A-Za-z]:)/)) {92dir = '/' + dir;93}94dirs.push(dir);95}96return dirs.concat(opts.paths);97}98};99100101