Created
February 25, 2010 20:38
-
-
Save bentomas/315010 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From c40555b5b2a0269b05ea17753c63567fd890dc26 Mon Sep 17 00:00:00 2001 | |
From: Benjamin Thomas <benjamin@benjaminthomas.org> | |
Date: Thu, 25 Feb 2010 20:38:04 +0000 | |
Subject: [PATCH] Add a 'resolve' method to require that returns the path to the module. | |
--- | |
doc/api.txt | 16 ++++++++++++++++ | |
src/node.js | 29 ++++++++++++++++++++++------- | |
test/simple/test-require-resolve.js | 15 +++++++++++++++ | |
3 files changed, 53 insertions(+), 7 deletions(-) | |
create mode 100644 test/simple/test-require-resolve.js | |
diff --git a/doc/api.txt b/doc/api.txt | |
index 23a697a..f16bb91 100644 | |
--- a/doc/api.txt | |
+++ b/doc/api.txt | |
@@ -400,6 +400,22 @@ puts("The area of a circle of radius 4 is " + area(4)); | |
---------------------------------------- | |
++require.async(module, callback)+:: | |
+Async version of +require+. | |
+ | |
+ | |
++require.resolve(module)+:: | |
+Resolves the file location of +module+. | |
++ | |
+---------------------------------------- | |
+var location = require.resolve('sys'); | |
+sys.puts(location); | |
+// outputs: /usr/local/lib/node/libraries/sys.js | |
+---------------------------------------- | |
+ | |
+ | |
++require.async.resolve(module, callback)+:: | |
+Async version of +require.resolve+. | |
== Timers | |
diff --git a/src/node.js b/src/node.js | |
index e76afa3..ba63a90 100644 | |
--- a/src/node.js | |
+++ b/src/node.js | |
@@ -824,9 +824,9 @@ function resolveModulePath(request, parent) { | |
function loadModuleSync (request, parent) { | |
- var resolvedModule = resolveModulePath(request, parent); | |
- var id = resolvedModule[0]; | |
- var paths = resolvedModule[1]; | |
+ var resolvedModule = resolveModulePath(request, parent), | |
+ id = resolvedModule[0], | |
+ paths = resolvedModule[1]; | |
debug("loadModuleSync REQUEST " + (request) + " parent: " + parent.id); | |
@@ -850,10 +850,9 @@ function loadModuleSync (request, parent) { | |
function loadModule (request, parent, callback) { | |
- var | |
- resolvedModule = resolveModulePath(request, parent), | |
- id = resolvedModule[0], | |
- paths = resolvedModule[1]; | |
+ var resolvedModule = resolveModulePath(request, parent), | |
+ id = resolvedModule[0], | |
+ paths = resolvedModule[1]; | |
debug("loadModule REQUEST " + (request) + " parent: " + parent.id); | |
@@ -953,6 +952,22 @@ Module.prototype._loadContent = function (content, filename) { | |
require.paths = process.paths; | |
require.async = requireAsync; | |
require.main = process.mainModule; | |
+ | |
+ function requireResolve (path) { | |
+ var resolvedModule = resolveModulePath(path, self), | |
+ id = resolvedModule[0], | |
+ paths = resolvedModule[1]; | |
+ return findModulePath(id, paths); | |
+ } | |
+ function requireAsyncResolve (path, cb) { | |
+ var resolvedModule = resolveModulePath(path, self), | |
+ id = resolvedModule[0], | |
+ paths = resolvedModule[1]; | |
+ return findModulePath(id, paths, cb); | |
+ } | |
+ require.resolve = requireResolve; | |
+ require.async.resolve = requireAsyncResolve; | |
+ | |
// create wrapper function | |
var wrapper = "(function (exports, require, module, __filename, __dirname) { " | |
+ content | |
diff --git a/test/simple/test-require-resolve.js b/test/simple/test-require-resolve.js | |
new file mode 100644 | |
index 0000000..d55d417 | |
--- /dev/null | |
+++ b/test/simple/test-require-resolve.js | |
@@ -0,0 +1,15 @@ | |
+process.mixin(require("./common")); | |
+ | |
+var path = require('path'); | |
+ | |
+require.paths.unshift(path.join(__dirname, '../../lib')); | |
+ | |
+assert.equal(path.join(__dirname, 'common.js'), require.resolve('./common')); | |
+assert.equal(path.join(__dirname, '../../lib/sys.js'), require.resolve('sys')); | |
+ | |
+require.resolveAsync('./common', function(location) { | |
+ assert.equal(path.join(__dirname, 'common.js'), location); | |
+ }); | |
+require.resolveAsync('sys', function(location) { | |
+ assert.equal(path.join(__dirname, '../../lib/sys.js'), location); | |
+ }); | |
-- | |
1.6.3.3 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment