Node.js中path.resolve和path.join的区别

path.resolve 和 path.join 的区别

path.joinpath.resolve函数都允许传入多个字符串,将参数拼接后返回一个路径字符串。

但是在使用他们时,要考虑到其中的区别。

一、path.resolve()方法

我们可以将path.resolve方法解析路径的起点是执行Node命令的工作目录,跟path.resolve方法执行的位置无关,我们且将工作目录称作root

path.resolve(subpath0, subpath1, subpath2, ...)返回一个路径,该路径相当于不断地执行cd命令,

基于root,先cd subpath0,然后cd subpath1,再不断cd,最后返回切换到的所在目录。

❗ 需要注意的是,如果参数中有以磁盘X:/开头的字符串,则将会切换到平台的根目录下。

当然 path.resolve方法不会真的去切换目录,上面这段话会帮助我们理解path.resolve的算法。

⭐ 例子:

假设当前工作目录为E:\, 同时E:\test\index.js中的内容如下:

console.log( path.resolve() );
console.log( path.resolve('foo', 'bar') );
console.log( path.resolve('foo', '.') );
console.log( path.resolve('foo', '/bar'));
console.log( path.resolve('foo', 'bar', '..'));
console.log( path.resolve('C:\\dist', 'img'));

执行 node ./test/index.js,输出结果如下:

console.log( path.resolve() );                 // 输出👉  "E:\\"
console.log( path.resolve('foo', 'bar') );     // 输出👉  "E:\\foo\\bar"
console.log( path.resolve('foo', '.') );       // 输出👉  "E:\\foo"
console.log( path.resolve('foo', '/bar'));     // 输出👉  "E:\\bar"
console.log( path.resolve('foo', 'bar', '..')) // 输出👉  "E:\\foo"
console.log( path.resolve('C:\\dist', 'img')); // 输出👉  "C:\\dist\\img"

二、path.join()方法

该方法只是将参数中的路径进行智能拼接,每个字符串参数最前面的/不起作用,会被认为是上一级目录。

path.join方法解析的起点会变化:

如果第一个参数是以磁盘根路径开头的绝对路径,则path.join解析的起点为第一个参数路径。

如果第一个参数是以根路径/开头的绝对路径,则path.join解析的起点为第一个参数路径。

如果第一个参数不是以根路径开头的绝对路径,则path.join解析的起点为当前目录,即"."

// 没有参数
console.log( path.join() );                 // 输出👉  "."

// 以相对路径foo作为第一个参数
console.log( path.join('foo', 'bar') );     // 输出👉  "foo\\bar"

// "/bar" 前的斜杠无效
console.log( path.join('foo/', '/bar') );     // 输出👉  "foo\\bar"

// 以linux下根路径/foo/作为第一个参数。
console.log( path.join('/foo/', 'bar') );  // 输出👉  '\\foo\\bar'

// 以点号作为第一个参数
console.log( path.join('.', 'foo') );       // 输出👉  "foo"

// 以上一级目录作为第一个参数
console.log( path.join('..', 'foo'));       // 输出👉  "..\\foo"

// 以上一级目录作为参数
console.log( path.join('foo/', '/bar', '..')) // 输出👉  "foo"

// windows下绝对路径作为参数
console.log( path.join('C:\\dist', 'img')); // 输出👉  "C:\dist\img"
console.log( path.join('foo', 'C:\\'));     // 输出👉  "foo\\C:\\"
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值