为什么 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
并使传递给它的所有相对路径都相对于该路径。
当我们 运行 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
并使传递给它的所有相对路径都相对于该路径。