1
1
const Module = require ( 'module' ) ;
2
+ const path = require ( 'path' ) ;
2
3
3
4
const log = require ( 'debug' ) ( 'roc:core:require' ) ;
4
5
@@ -8,8 +9,20 @@ export default function patchResolveFilename(resolveRequest) {
8
9
log ( 'Initializing' ) ;
9
10
10
11
Module . _resolveFilename = function rocResolveFilename ( request , parent ) {
12
+ // Get the context for the request, the directory that the request is coming from.
13
+ // We are using "dirname" here to remove "node_modules" from the path that will be
14
+ // present given how Nodes algorithm works, with the first path being the directory
15
+ // from which the request was performed.
16
+ // Example: [/dir/that/did/the/request/node_modules, /dir/that/did/the/node_modules, ...]
17
+ const context = parent && parent . paths
18
+ ? path . dirname ( parent . paths [ 0 ] )
19
+ : undefined ;
20
+
11
21
try {
12
- return originalResolveFilename . apply ( this , [ resolveRequest ( request , parent . id ) , parent ] ) ;
22
+ return originalResolveFilename . apply ( this , [
23
+ resolveRequest ( request , context ) ,
24
+ parent ,
25
+ ] ) ;
13
26
} catch ( _error ) {
14
27
/* We try again with fallback enabled.
15
28
* This emulates kinda how NODE_PATH works in that we try again with another scope.
@@ -19,7 +32,7 @@ export default function patchResolveFilename(resolveRequest) {
19
32
* extension is providing.
20
33
*/
21
34
return originalResolveFilename . apply ( this , [
22
- resolveRequest ( request , parent . id , { fallback : true } ) ,
35
+ resolveRequest ( request , context , { fallback : true } ) ,
23
36
parent ,
24
37
] ) ;
25
38
}
0 commit comments