Skip to content

Commit 3624102

Browse files
committed
Fixes requirejs#393, make relative node requires fully pathed
1 parent b518e47 commit 3624102

File tree

5 files changed

+39
-4
lines changed

5 files changed

+39
-4
lines changed

build/jslib/node.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,20 @@
121121
} else {
122122
def(moduleName, function () {
123123
//Get the original name, since relative requires may be
124-
//resolved differently in node (issue #202)
125-
var originalName = hasProp(context.registry, moduleName) &&
126-
context.registry[moduleName].map.originalName;
124+
//resolved differently in node (issue #202). Also, if relative,
125+
//make it relative to the URL of the item requesting it
126+
//(issue #393)
127+
var dirName,
128+
map = hasProp(context.registry, moduleName) &&
129+
context.registry[moduleName].map,
130+
parentMap = map && map.parentMap,
131+
originalName = map && map.originalName;
132+
133+
if (originalName.charAt(0) === '.' && parentMap) {
134+
dirName = parentMap.url.split('/');
135+
dirName.pop();
136+
originalName = dirName.join('/') + '/' + originalName;
137+
}
127138

128139
try {
129140
return (context.config.nodeRequire || req.nodeRequire)(originalName);

tests/alln.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ node allNode.js
22
node ../r.js all.js
33
node node/syncMap/syncMap.js
44
node node/pluginLocalId/test.js
5-
node node/syncRequire/main.js
5+
node node/syncRequire/main.js
6+
node node/nodeRelative/main.js

tests/node/nodeRelative/main.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
var requirejs = require("../../../r.js");
2+
3+
requirejs.config({
4+
baseUrl: __dirname,
5+
paths: {
6+
lamp: 'other/src/lamp'
7+
}
8+
});
9+
10+
requirejs(['lamp'], function (lamp) {
11+
console.log('lamp name ' + (lamp.name === 'lamp' ? 'PASSED' : 'FAILED'));
12+
console.log('light name ' + (lamp.light.name === 'light' ? 'PASSED' : 'FAILED'));
13+
});
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = {
2+
name: 'light'
3+
};
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
//Load a node lib that is relative.
2+
define(['../lib/light'], function (light) {
3+
return {
4+
name: 'lamp',
5+
light: light
6+
};
7+
});

0 commit comments

Comments
 (0)