Node.js 中分为 相对路径 和 绝对路径 两种,相对路径表示当前目录层级对于目标的位置,而绝对路径表示目标当前所在的位置。
./
表示当前目录require
时,与 __dirname
一样require
时,与 process.cwd()
一样../
表示上层目录只有在 require()
时才使用相对路径的写法,其它地方一律使用绝对路径。
// 当前目录下path.dirname(__filename) + '/path.js';// 相邻目录下path.resolve(__dirname) + '../regexp/regexp.js';
__dirname
表示被执行的 JavaScript 文件所在目录的绝对路径__filename
表示被执行的 JavaScript 文件的绝对路径process.cwd()
当前 Node 命令执行时所在的文件夹的绝对路径path.join([...paths])
使用平台特定的分隔符把所有 path
片段连接到一起,并规范化生成的路径(仅将参数地址进行物理连接)path.resolve([...paths])
将路径或路径片段的序列处理成绝对路径。指定的路径序列是从右往左开始处理的,后面的 path
被依次处理,直到构造完绝对路径(会对参数中的每一个路径尝试执行 cd
操作,直到拿到最后一个路径对应的绝对路径)🌰 示例:
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');// return: '/foo/bar/baz/asdf'path.join('foo', {}, 'bar');// throw 'TypeError: Path must be a string. Received {}'path.resolve('/foo/bar', './baz');// return: '/foo/bar/baz'path.resolve('/foo/bar', '/tmp/file/');// return: '/tmp/file'path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');// 如果当前工作目录是 /home/myself/node// 则返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'
/
tryPackage
函数去解析目录下的 package.json
,然后取出其中的 main
字段所写入的文件路径.js
、.json
和 .node
三种后缀名,判断是否存在,存在则返回index.js
、index.json
和 index.node
,判断是否存在,存在则返回.js
、.json
和 .node
后缀名进行尝试/
tryPackage
,解析流程和上面的情况类似index.js
、index.json
和 index.node
,判断是否存在,存在则返回