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.