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

本文详细介绍了Node.js中path.resolve和path.join两个函数的使用区别。path.resolve从当前工作目录开始,模拟连续的cd命令,最终得到一个绝对路径;而path.join只是简单地将路径字符串拼接,不考虑相对路径。通过实例展示了两者在不同情况下的输出结果,帮助读者理解这两个函数的工作原理。
摘要由CSDN通过智能技术生成

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:\\"
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值