Node中处理文件路径的几种方式对比
Nodejs中提供了几种处理路径的方式,包括:
- __dirname
- __filename
- process.cwd()
- ./
- ../
笼统的说前三种代表了绝对路径,后两种为相对路径。其中究竟有什么区别,通过下面的例子给出答案。
文件结构:
1 | app |
test.js
1 | var path = require('path'); |
其中path.resolve将相对路径转换为绝对路径。
第一种情况:
启动目录为:E:\github\node-file-test\app\model
命令: node test.js
结果:
1 | __dirname: E:\github\node-file-test\app\model |
第二种情况:
启动目录为:E:\github\node-file-test\app
命令: node model/test.js
结果:
1 | __dirname: E:\github\node-file-test\app\model |
总结:
- __dirname 指向被执行文件所在文件夹的绝对路径
- __filename 指向被执行文件的绝对路径
- process.cwd() 指向当前程序所在的执行目录的绝对路径
- path.resolve(‘./‘) 指向当前程序所在执行目录的绝对路径
可能会出现的问题:
在Nodejs中使用相对路径时应注意,不同地方使用相对路径因为处理相对路径的机制不同,所以可能会导致文件找不到的情况。
一、在require()中使用相对路径,此时按照Commonjs规范的规则进行寻址。如文件路径为'./test'
,则根据test
的父模块确定其绝对路径并按照Commonjs规范的规则去寻找该文件,详情见require的基本用法
二、除require外的地方使用了相对路径,如使用了fs
模块的API,并使用了相对路径。如:
1 | var fs = require('fs'); |
此时路径按照程序启动目录为基准去寻找该文件,如果程序启动目录的路径发生变化,很有可能发生文件找不到的情况。在这种情况下应尽量使用绝对路径的方式,如:path.resolve(__dirname,'../lib/common.js')
的方式去寻找该文件。这样就能保证以当前目录为基准去拼接绝对路径,而不是与程序启动目录相关联。
Node中处理文件路径的几种方式对比