Node中的__dirname、__filename、process.cwd()的路径问题

Node.js中的文件路径大概有

// 绝对路径
__dirname,
__filename, 
process.cwd(), 
// 相对路径
./,
../

前三个都是绝对路径,为了便于比较,./ 和 ../ 我们通过 path.resolve('./')来转换为绝对路径。

__dirname: 获得当前执行文件所在目录的完整目录名
__filename: 获得当前执行文件的带有完整绝对路径的文件名
process.cwd():获得当前执行node命令时候的文件夹目录名
./: 文件所在目录

有require参与的情况下结果有所不同

__dirname: 总是返回被执行的 js 所在文件夹的绝对路径
__filename: 总是返回被执行的 js 的绝对路径
process.cwd(): 总是返回运行 node 命令时所在的文件夹的绝对路径
./: 跟 process.cwd() 一样,返回 node 命令时所在的文件夹的绝对路径

谈及原因,来了解一下require() 的基本用法吧:
下面的内容来自require() 源码解读,由阮一峰翻译自《Node使用手册》。

Bimg20174121494579883637.png

由此可见,关于 ./ 正确的结论是:
在 require() 中使用是跟 __dirname 的效果相同,不会因为启动脚本的目录不一样而改变;
在其他情况下跟 process.cwd() 效果相同,是相对于启动脚本所在目录的路径

最后总结一下:

__dirname: 获得当前执行文件所在目录的完整目录名
__filename: 获得当前执行文件的带有完整绝对路径的文件名
process.cwd():获得当前执行node命令时候的文件夹目录名
./: 不使用require时候,./与process.cwd()一样,使用require时候,与__dirname一样
只有在 require() 时才使用相对路径(./, ../)的写法,其他地方一律使用绝对路径

本文仅作为自我学习总结,非原创文章。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容