Nodejs中,path.join()和path.resolve()的区别

Nodejs中,path.join()和path.resolve()的区别

在说path.join()和path.resolve()的区别之前,我先说下文件路径 ./和../和/ 之间的区别
/代表的是根目录;
./代表的是当前目录;
…/代表的是父级目录。

然后再来说下path.join()和path.resolve()的区别
我们需要注意的是,这两个方法都属于path模块,在使用之前我们需要先引入模块

var path = require('path');

进入正文:

path.resolve()
方法作用
path.resolve方法把传入的路径或者路径段解析为绝对路径。
语法:

path.resolve([from ...], to)

说明:
如果没有传入 path 片段,或者path 片段长度为零(空字符),则 path.resolve() 会返回当前工作目录的绝对路径(相当于使用path.resolve(__dirname))

借用一下别人的代码,我们来看下一个很经典的例子,假设当前的工作路径为/workspace/demo

console.log(path.resolve())      // returns /workspace/demo
console.log(path.resolve(''))     // returns /workspace/demo
console.log(path.resolve(__dirname)) // returns /workspace/demo
console.log(path.resolve('/img/books', '/net'))  // returns '/net'
console.log(path.resolve('img/books', '/net'))  // returns '/net'
console.log(path.resolve('img/books', './net'))  // returns '/workspace/demo/img/books/net'
console.log(path.resolve('/img/books', './net'))  // returns '/img/books/net'
console.log(path.resolve('/img/books', 'net'))   // returns '/img/books/net'
console.log(path.resolve('/img/books', '../net'))     // returns '/img/net'
console.log(path.resolve('src','/img/books', '../net'))  // returns '/img/net'
console.log(path.resolve('src','./img/books', '../net'))  // returns '/workspace/demo/src/img/net'
console.log(path.resolve('src','img/books', '../net'))   // returns '/workspace/demo/src/img/net'

说明:我们在文章开头所说的./和…/和/的区别就派上用场了,从右到左,我们可以看到,如果路径以/开头,就不会再拼接左边的路径了,因为已经是根目录了,如果是以./开头或者没有符号,就会拼接左边的路径,如果是以 ../开头的,就拼接左边路径的父路径。

path.join()
方法作用:
path.join()方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径。
语法:

path.join([path1], [path2], [...])

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

借用一下别人的代码,我们来看下一个很经典的例子

path.join('/img', 'book', 'net/abc', 'inter', '..'); // returns /img/book/net/abc
console.log(path.join('/img/books', '../net'))  // returns /img/net
console.log(path.join('img/books', '../net'))   // returns img/net
console.log(path.join('/img/books', './net'))   // returns /img/books/net
console.log(path.join('img/books', './net'))   // returns img/books/net
console.log(path.join('/img/books', 'net'))    // returns /img/books/net
console.log(path.join('img/books', 'net'))    // returns /img/books/net
console.log(path.join('/img/books', '/net'))   // returns /img/books/net
console.log(path.join('img/books', '/net'))    // returns img/books/net

说明:path.join()只会拼接给定的参数路径,不会再拼接当前的工作目录,从右边往左看,以/开头的路径,依然会拼接左边的路径,…和…/都是代表上一级目录的意思,所以path.join(’/img’, ‘book’, ‘net/abc’, ‘inter’, ‘…’)因为最右边是…,代表上一级目录,所以会跳过inter目录,最终只会拼接得到/img/book/net/abc。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值