I am trying to require a file relatively and mysteriously the following is happening
This works well which points to /Users/marcos/Desktop/Taper/lib/utils.js
myPath = "/Users/marcos/Desktop/Taper/lib/./utils";
require(myPath);
This doesn't but it should point to exactly the same file:
require.paths.unshift("/Users/marcos/Desktop/Taper/lib")
require("./utils"); //Doesn't work with './'
require("utils"); //Works Fine
Anyone knows why I can't still use ./
in this case for loading the path since
require("path").resolve("/Users/marcos/Desktop/Taper/lib", "./utils")
results in:
"/Users/marcos/Desktop/Taper/lib/utils"
anyway?
Thanks in advance
UPDATED:
From the documentation:
A module prefixed with '/'
is an absolute path to the file. For
example, require('/home/marco/foo.js')
will load the file at
/home/marco/foo.js
.
A module prefixed with './'
is relative to the file calling require()
.
That is, circle.js
must be in the same directory as foo.js
for
require('./circle')
to find it.
Without a leading '/' or './' to indicate a file, the module is either
a "core module" or is loaded from a node_modules
folder.
If the given path does not exist, require()
will throw an Error with
its code
property set to 'MODULE_NOT_FOUND'
.
Here’s the original answer, which refers to require.paths
(which is no longer supported):
From the documentation:
In node, require.paths
is an array of strings that represent paths to be searched for modules when they are not prefixed with '/'
, './'
, or '../'
.
(emphasis mine)
You can pass that using NODE_PATH
Example:
NODE_PATH=`pwd` node app.js
i created a new node module called "rekuire"
it allows you to "require" without using of relative paths
its a big time saver when it comes to testing/refactoring
https://npmjs.org/package/rekuire
super easy to use