@@ -11,7 +11,7 @@ const path = require('path');
11
11
const internalModuleReadFile = process . binding ( 'fs' ) . internalModuleReadFile ;
12
12
const internalModuleStat = process . binding ( 'fs' ) . internalModuleStat ;
13
13
14
-
14
+ var moduleCache = { } ;
15
15
// If obj.hasOwnProperty has been overridden, then calling
16
16
// obj.hasOwnProperty(prop) will break.
17
17
// See: https://github.com/joyent/node/issues/1707
@@ -76,7 +76,7 @@ function readPackage(requestPath) {
76
76
}
77
77
78
78
try {
79
- var pkg = packageMainCache [ requestPath ] = JSON . parse ( json ) . main ;
79
+ var pkg = packageMainCache [ requestPath ] = JSON . parse ( json ) ;
80
80
} catch ( e ) {
81
81
e . path = jsonPath ;
82
82
e . message = 'Error parsing ' + jsonPath + ': ' + e . message ;
@@ -88,9 +88,18 @@ function readPackage(requestPath) {
88
88
function tryPackage ( requestPath , exts ) {
89
89
var pkg = readPackage ( requestPath ) ;
90
90
91
- if ( ! pkg ) return false ;
91
+ if ( ! ( pkg && pkg . main ) ) return false ;
92
+
93
+ var resolved = pkg [ '_resolved' ] ,
94
+ main = pkg . main ;
95
+
96
+ var filename ;
97
+ if ( resolved ) {
98
+ filename = moduleCache [ resolved ] || ( moduleCache [ resolved ] = path . resolve ( requestPath , main ) ) ;
99
+ } else {
100
+ filename = path . resolve ( requestPath , main ) ;
101
+ }
92
102
93
- var filename = path . resolve ( requestPath , pkg ) ;
94
103
return tryFile ( filename ) || tryExtensions ( filename , exts ) ||
95
104
tryExtensions ( path . resolve ( filename , 'index' ) , exts ) ;
96
105
}
0 commit comments