节点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相对于当前__dirname
path,而不明确地指定它,这是因为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()
)是意想不到的,这是完全可能的。
请注意,传递给require
path是不同的,因为相对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来安装。