Skip to content

Commit 226eff5

Browse files
isaacsry
authored andcommitted
Add require.resolve.
Also, hack the repl so that it works as expected there, too.
1 parent 3407dab commit 226eff5

File tree

3 files changed

+46
-18
lines changed

3 files changed

+46
-18
lines changed

lib/repl.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ function cwdRequire (id) {
3131
Object.keys(require).forEach(function (k) {
3232
cwdRequire[k] = require[k];
3333
});
34+
// hack for require.resolve("./relative") to work properly.
35+
module.filename = process.cwd() + "/repl";
3436

3537
function resetContext() {
3638
context = Script.createContext();

src/node.js

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -164,10 +164,8 @@ var module = (function () {
164164
};
165165
}
166166

167-
function findModulePath (id, dirs) {
168-
process.assert(Array.isArray(dirs));
169-
170-
var nextLoc = traverser(id, id.charAt(0) === '/' ? [''] : dirs);
167+
function findModulePath (request, paths) {
168+
var nextLoc = traverser(request, request.charAt(0) === '/' ? [''] : paths);
171169

172170
var fs = requireNative('fs');
173171

@@ -181,7 +179,10 @@ var module = (function () {
181179

182180

183181
// sync - no i/o performed
184-
function resolveModulePath(request, parent) {
182+
function resolveModuleLookupPaths (request, parent) {
183+
184+
if (natives[request]) return [request, []];
185+
185186
var start = request.substring(0, 2);
186187
if (start !== "./" && start !== "..") {
187188
return [request, modulePaths];
@@ -207,18 +208,33 @@ var module = (function () {
207208
function loadModule (request, parent) {
208209
debug("loadModule REQUEST " + (request) + " parent: " + parent.id);
209210

211+
var resolved = resolveModuleFilename(request, parent);
212+
var id = resolved[0];
213+
var filename = resolved[1];
214+
210215
// With natives id === request
211216
// We deal with these first
212-
var cachedNative = internalModuleCache[request];
217+
var cachedNative = internalModuleCache[id];
213218
if (cachedNative) {
214219
return cachedNative.exports;
215220
}
216-
if (natives[request]) {
221+
if (natives[id]) {
217222
debug('load native module ' + request);
218-
return loadNative(request).exports;
223+
return loadNative(id).exports;
219224
}
220225

221-
var resolvedModule = resolveModulePath(request, parent),
226+
var cachedModule = moduleCache[filename];
227+
if (cachedModule) return cachedModule.exports;
228+
229+
var module = new Module(id, parent);
230+
moduleCache[filename] = module;
231+
module.load(filename);
232+
return module.exports;
233+
};
234+
235+
function resolveModuleFilename (request, parent) {
236+
if (natives[request]) return [request, request];
237+
var resolvedModule = resolveModuleLookupPaths(request, parent),
222238
id = resolvedModule[0],
223239
paths = resolvedModule[1];
224240

@@ -228,15 +244,8 @@ var module = (function () {
228244
if (!filename) {
229245
throw new Error("Cannot find module '" + request + "'");
230246
}
231-
232-
var cachedModule = moduleCache[filename];
233-
if (cachedModule) return cachedModule.exports;
234-
235-
var module = new Module(id, parent);
236-
moduleCache[filename] = module;
237-
module.load(filename);
238-
return module.exports;
239-
};
247+
return [id, filename];
248+
}
240249

241250

242251
Module.prototype.load = function (filename) {
@@ -262,6 +271,9 @@ var module = (function () {
262271
return loadModule(path, self);
263272
}
264273

274+
require.resolve = function (request) {
275+
return resolveModuleFilename(request, self)[1];
276+
}
265277
require.paths = modulePaths;
266278
require.main = process.mainModule;
267279
// Enable support to add extra extension types

test/simple/test-require-resolve.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
var common = require("../common");
2+
var fixturesDir = common.fixturesDir;
3+
var assert = common.assert;
4+
var path = require("path");
5+
6+
assert.equal(path.join(__dirname, "../fixtures/a.js"),
7+
require.resolve("../fixtures/a"));
8+
assert.equal(path.join(fixturesDir, "a.js"),
9+
require.resolve(path.join(fixturesDir, "a")));
10+
assert.equal(path.join(fixturesDir, "nested-index", "one", "index.js"),
11+
require.resolve("../fixtures/nested-index/one"));
12+
assert.equal("path", require.resolve("path"));
13+
14+
console.log("ok");

0 commit comments

Comments
 (0)