我这里有这个代码:
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);
答案 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