为什么require和fs.existSsync使用不同的相对路径

时间:2013-05-20 07:06:25

标签: javascript node.js

我这里有这个代码:

if(fs.existsSync('./example/example.js')){
    cb(require('../example/example.js'));
}else{
    cb();
}

fs.existSync为什么要使用与require不同的目录?

这将是目录树,不包括不需要的东西......(我正在使用express btw)

\example
    example.js
\routes
    index.js <-- this is the one where I am using this code
app.js <-- this one requires index.js and calls its functions using app.get('/example',example.index);

2 个答案:

答案 0 :(得分:4)

您用于require的路径相对于您调用require的文件(因此相对于routes/index.js);您用于fs.existsSync()(以及其他fs函数)的路径是相对于当前工作目录(当您启动node时当前的目录,前提是您的应用程序没有执行fs.chdir来改变它。)

至于这种差异的原因,我只能猜测,但require是一种机制,其中一些“额外”逻辑w.r.t.寻找其他模块是有道理的。它也不应受应用程序中运行时更改的影响,如前面提到的fs.chdir

答案 1 :(得分:0)

因为文件的相对路径是相对于process.cwd()的,如this link中所述。您可以使用path.resolve来解析相对于该位置的路径,如下所示:

const path = require('path');

const desiredPath = path.resolve(__dirname, './file-location');
console.log(fs.existsSync(desiredPath)); // returns true if exists