为什么 FS 模块在 Node.js 中做相对路径并要求指向不同的位置?

Why do do relative paths in Node.js for FS module and require point at different locations?

当我们 运行 Node JS 上的服务器时,我们应该使用相对于我们在其中启动 node 的目录的路径。为了解决这个问题,我们应该使用 path 模块,例如这个:

fs.createReadStream(path.join(__dirname, '..', '..', 'data', 'someData.csv'))

但是当我们使用 require 时,我们可以只放置我们需要的文件的相对路径,而不必考虑 node 从哪里启动:

const {data} = require('../../models/data.model');

能否解释一下:为什么会这样?

fs 模块处理相对于进程工作目录的相对路径,例如它在哪里推出。您可以使用 process.cwd() 找出它的位置。

require 有点特殊。当您的 script/module 被初始化和调用时,NodeJS 将在后台创建一个全新的 require 函数。您可以阅读更多相关信息 here

基本上,您的模块有自己的 require,它知道 __dirname 并使传递给它的所有相对路径都相对于该路径。