我正在查看 Nodejs/expressjs,并且看到不同的教程使用 __diranme + "/my_folder"
、"./my_folder"
或仅使用 “我的文件夹”
.
例子:
app.use("/static", express.static(__dirname + "/my_folder"));
app.use("/static", express.static("./my_folder"));
app.use("/static", express.static("my_folder"));
我都试过了,它们似乎都有效;相对路径应该使用哪一个?
我也见过 require('./my_file.js')
和 require('my_file')
。有区别吗?我应该使用什么?
最佳答案
几乎所有将文件路径作为参数的函数(除了 require
),都会在某一时刻使用 fs
模块中的函数来读取或写入它们.
Node.js documentation for fs module说:
Relative path to filename can be used, remember however that this path will be relative to process.cwd().
当您考虑这一点时,要使这些函数的行为有所不同,将需要很大的技巧。毕竟,fs 函数是常规的 Javascript,它们没有特殊的访问权限来获取调用者的信息。他们唯一可以访问的 __dirname
是他们自己的模块(核心 fs 模块)的 __dirname
。
require
函数 可以解析相对于当前 __dirname
的路径,而无需明确指定,这是因为 require
是它出现的每个文件的唯一函数。这样,它可以访问当前模块的细节,尤其是它的路径。
您的代码恰好可以工作的原因是,目前,上面出现的 app.js
(或类似代码)恰好与 process.cwd( )
目前是。 IE。使用 node app.js
启动应用程序会起作用,而使用 node myappdir/app.js
启动应用程序(从其父目录运行)则不会。 process.cwd()
会有所不同。
只要您记住相对路径将通过 process.cwd()
解析,那么您可以使用更短的语法。在某些情况下,它可能是一个优势。它确实使您的代码依赖于它的调用方式。我个人更喜欢使用 __dirname
,因为它对于正在发生的事情更加透明,并且相对路径与您在同一文件的 require
语句中使用的路径一致。
关于node.js - Node js/Express js 相对路径(点或 __dirname 或不带任何前缀)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16727045/