Node's require is always relative to the file that calls require.  In fact,
the internal implementation of this is done by giving file a unique copy of
the require function that embeds that file's directory.  If you wanted to
require relative to the cwd, then use process.cwd and path.resolve.  If you
want to require relative to your main module, store a value somewhere in
your process (process.root maybe?) and use that in conjunction with
path.resolve.

The fs operations are relative to the process.cwd instead of the calling
file.  If you want them to be relative to the calling file, simply
path.resolve with __dirname and they will act like require does.

Noce gives you more options in this regard than any other platform I've
worked with.  After working with node's require semantics, it's now painful
for me to use other module systems because I can't write portable libraries
as easily.  Sometimes it's not even possible to have a set of
inter-dependencies that only use relative requires.


On Mon, Aug 26, 2013 at 8:34 AM, Gagle <gagle...@gmail.com> wrote:

> But now suppose you have another file called b.js that is required by a.js
> and is stored in a different directory and uses a relative path. You can't
> use __dirname.
>
> El lunes, 26 de agosto de 2013 15:32:17 UTC+2, ajlopez escribió:
>>
>> Ah! I see..
>>
>> But this is not a problem for require, but for fs.
>>
>> Ok, in my code I would use
>>
>> if (fs.existsSync(path.join(__**dirname, "settings.json"))
>>
>>
>> On Mon, Aug 26, 2013 at 10:27 AM, Gagle <gagl...@gmail.com> wrote:
>>
>>> $ pwd
>>> /home/user1
>>> $ mkdir dir
>>> $ cat > dir/app.js
>>> console.log (process.cwd ());
>>> $ node dir/app.js
>>> /home/user1
>>> $ cd dir && node app.js
>>> /home/user1/dir
>>>
>>> Now suppose you have this code:
>>>
>>> //app.js
>>> var fs = require ("fs");
>>> if (fs.existsSync ("settings.json")){
>>>     doSomethingUseful ();
>>> }else{
>>>     //Warning!!
>>>     saveToDatabaseDefaultSettings ();
>>> }
>>>
>>> And execute the main file with a relative path:
>>>
>>> node dir/app
>>>
>>> You will enter into the else case because settings.json is stored
>>> inside dir but the cwd is not dir, so you expect the path
>>> ./dir/settings.json but in fact the path is ./settings.json.
>>>
>>> El lunes, 26 de agosto de 2013 15:05:10 UTC+2, ajlopez escribió:
>>>>
>>>> Gagle, can you write down a concrete use case?
>>>>
>>>>
>>>> On Mon, Aug 26, 2013 at 9:59 AM, Gagle <gagl...@gmail.com> wrote:
>>>>
>>>>> Because it's local to the file, it doesn't work anywhere.
>>>>>
>>>>> El lunes, 26 de agosto de 2013 14:46:55 UTC+2, mks escribió:
>>>>>
>>>>>> __dirname is local to any file. It works everywhere.
>>>>>>
>>>>>  --
>>>>> --
>>>>> Job Board: http://jobs.nodejs.org/
>>>>> Posting guidelines: https://github.com/joyent/**node**
>>>>> /wiki/Mailing-List-**Posting-**Guidelines<https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines>
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "nodejs" group.
>>>>> To post to this group, send email to nod...@googlegroups.com
>>>>>
>>>>> To unsubscribe from this group, send email to
>>>>> nodejs+un...@**googlegroups.com
>>>>>
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/**group**/nodejs?hl=en?hl=en<http://groups.google.com/group/nodejs?hl=en?hl=en>
>>>>>
>>>>> ---
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "nodejs" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to nodejs+un...@**googlegroups.com.
>>>>>
>>>>> For more options, visit 
>>>>> https://groups.google.com/**grou**ps/opt_out<https://groups.google.com/groups/opt_out>
>>>>> .
>>>>>
>>>>
>>>>  --
>>> --
>>> Job Board: http://jobs.nodejs.org/
>>> Posting guidelines: https://github.com/joyent/**node/wiki/Mailing-List-*
>>> *Posting-Guidelines<https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines>
>>> You received this message because you are subscribed to the Google
>>> Groups "nodejs" group.
>>> To post to this group, send email to nod...@googlegroups.com
>>> To unsubscribe from this group, send email to
>>> nodejs+un...@**googlegroups.com
>>> For more options, visit this group at
>>> http://groups.google.com/**group/nodejs?hl=en?hl=en<http://groups.google.com/group/nodejs?hl=en?hl=en>
>>>
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "nodejs" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to nodejs+un...@**googlegroups.com.
>>> For more options, visit 
>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>> .
>>>
>>
>>  --
> --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines:
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to nodejs@googlegroups.com
> To unsubscribe from this group, send email to
> nodejs+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en
>
> ---
> You received this message because you are subscribed to the Google Groups
> "nodejs" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to nodejs+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to nodejs@googlegroups.com
To unsubscribe from this group, send email to
nodejs+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nodejs+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to