节点js / Express js相对path(点或__dirname或没有任何前缀)?

我正在查看Nodejs / expressjs,并看到不同的教程使用__diranme + "/my_folder""./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")); 

我尝试了所有这些,他们似乎都工作。 哪一个我应该使用相对path?

我也看到require('./my_file.js')require('my_file') 。 有区别吗? 我应该使用什么?

几乎所有将文件path作为参数的函数(除require之外)都会使用fs模块的函数来读取或写入它们。

fs模块的Node.js文档说:

可以使用文件名的相对path,但请记住,此path将与process.cwd()相关。

当你考虑这个问题的时候,这些function的performance会有所不同, 毕竟,fs函数是正规的Javascript,他们没有特殊的访问关于调用者的信息。 他们可以访问的唯一__dirname是他们自己的模块(核心fs模块)的__dirname

require函数可以parsing相对于当前__dirnamepath,而不明确地指定它,这是因为require对于每个出现的单个文件都是唯一的函数。这样,​​它就可以访问当前模块的细节,特别是其path。

你的代码恰好工作的原因是,目前,上面的代码中的app.js (或类似的)恰好与process.cwd()当前所在的目录位于同一目录中。 即开始与node app.js的应用程序将工作,而启动与node myappdir/app.js (从其父目录运行)的应用程序不会。 process.cwd()会有所不同。

只要你记住相对path将通过process.cwd()来解决,那么你可以使用较短的语法。 在某些情况下,这可能是一个优势。 它确实使你的代码依赖于它的调用方式。 我个人更喜欢使用__dirname ,因为它对于发生的事情来说更透明一些,并且相对path与在同一个文件的require语句中使用的path一致。

__dirname版本是最健壮的,因为__dirname将始终是包含当前正在执行的.js文件的目录,这比"my_folder""./my_folder"都是相对path更好的锚,并且如果进程当前正在工作目录( process.cwd() )是意想不到的,这是完全可能的。

请注意,传递给requirepath是不同的,因为相对path相对于调用模块的位置被parsing,而不考虑进程的当前工作目录(再次,这使得它们更不脆弱)。

我使用app.use(express.static(path.join(__dirname, 'public'))); 然后我有三个文件夹在我的公共,样式表,JavaScript和图像,这使我可以通过访问这些静态文件

  <link rel="stylesheet" href="/stylesheets/jquery-ui.css" /> <script type="text/javascript" src="/javascripts/jquery-1.9.1.js"></script> 

我认为./myfolder方法本质上是一样的。 我从来没有用过它。
/myfolder我的文件/myfolder方法,我从来没有见过。

  require('./my_file.js') I use as require('./routes/my_file.js') aand is where I store all my express routes. 

require('myfile')是对您安装的软件包的调用,或者用express来安装。