Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save bentomas/315010 to your computer and use it in GitHub Desktop.
Save bentomas/315010 to your computer and use it in GitHub Desktop.
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