path.join()和path.resolve()的区别

path.join([...paths])

  • ...paths string 路径片段的序列
  • 返回:string

path.join() 方法会将所有给定的 path 片段连接到一起(使用平台特定的分隔符作为定界符),然后规范化生成的路径。

长度为零的 path 片段会被忽略。 如果连接后的路径字符串为长度为零的字符串,则返回 '.',表示当前工作目录。

如果任何的路径片段不是字符串,则抛出 TypeError。

const path = require('path')
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..') // 结果:'/foo/bar/baz/asdf' 

path.resolve([...paths])

  • ...paths string 路径片段的序列
  • 返回:string

path.resolve() 方法会将路径或路径片段的序列解析为绝对路径。

给定的路径序列会从右到左进行处理,后面的每个 path 会被追加到前面,直到构造出绝对路径。 例如,给定的路径片段序列:/foo/barbaz,调用 path.resolve('/foo', '/bar', 'baz') 会返回 /bar/baz,因为 'baz' 不是绝对路径,但 '/bar' + '/' + 'baz' 是。

如果在处理完所有给定的 path 片段之后还未生成绝对路径,则会使用当前工作目录。

生成的路径会被规范化,并且尾部的斜杠会被删除(除非路径被解析为根目录)。

零长度的 path 片段会被忽略。

如果没有传入 path 片段,则 path.resolve() 会返回当前工作目录的绝对路径。

如果任何参数不是字符串,则抛出 TypeError。

const path = require('path')
path.resolve('/foo/bar', './baz') // 结果 '/foo/bar/baz' 
path.resolve('/foo/bar', '/tmp/file/') // 结果 '/tmp/file' 
path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif') 
// 当前的工作路径是 /home/itbilu/node,结果为 '/home/itbilu/node/wwwroot/static_files/gif/image.gif'

对比

const path = require('path')

console.log(__dirname) // C:\app\test
path.join(__dirname,'/upload') // C:\app\test\upload
path.join(__dirname,'./upload') // C:\app\test\upload
path.resolve() // C:\app\test
path.resolve(__dirname,'/upload') // C:\upload
path.resolve(__dirname,'./upload') // C:\app\test\upload

对于path.resolve() 的理解
其处理方式类似于对这些路径逐一进行cd操作,与cd操作不同的是,这引起路径可以是文件,并且可不必实际存在(resolve() 方法不会利用底层的文件系统判断路径是否存在,而只是进行路径字符串操作)。例如:

path.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile')

相当于

cd foo/bar
cd /tmp/file/
cd ..
cd a/../subfile
pwd
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值