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

path.join()

path.join():方法使用平台特定的分隔符[Unix系统是/,Windows系统是\ ]把全部给定的 path 片段连接到一起,并规范化生成的路径。若任意一个路径片段类型错误,会报错。 例如:

__dirname
// __dirname返回当前文件所在的绝对路径
const path = require('path');

const path1 = path.join(__dirname, '/foo');
const path2 = path.join(__dirname, './foo/bar');
const path3 = path.join('/foo', 'bar', '/baz/apple', 'aaa', '..');
const path4 = path.join('foo', 'bar', 'baz');


console.log(path1);
console.log(path2);
console.log(path3);
console.log(path4);

// 输出结果
/Users/xiao/work/test/foo
/Users/xiao/work/test/foo/bar
/foo/bar/baz/apple
foo/bar/baz
复制代码

不合法的字符串将抛出异常

const path5 = path.join('foo', {}, 'bar');
// TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type object
复制代码

如果连接后的路径字符串是一个长度为零的字符串,则返回 '.',表示当前工作目录。

path.join('foo', 'bar', '..', '..')
// 返回结果为
'.'
复制代码
path.resolve()

path.resolve:方法会把一个路径或路径片段的序列解析为一个绝对路径。 例如:

const path = require('path');

const path1 = path.resolve('/a/b', '/c/d');
// 结果: /c/d
const path2 = path.resolve('/a/b', 'c/d');
// 输出: /a/b/c/d
const path3 = path.resolve('/a/b', '../c/d');
// 输出: /a/c/d
const path4 = path.resolve('a', 'b');
// 输出: /Users/xiao/work/test/a/b
复制代码

resolve把‘/’当成根目录 path.resolve()方法可以将多个路径解析为一个规范化的绝对路径。其处理方式类似于对这些路径逐一进行cd操作,与cd操作不同的是,这引起路径可以是文件,并且可不必实际存在(resolve()方法不会利用底层的文件系统判断路径是否存在,而只是进行路径字符串操作);

path.resolve('www', 'static', '../public', 'src', '..');
// cd www  /Users/xiao/work/test/www
// cd static /Users/xiao/work/test/www/static
// cd ../public /Users/xiao/work/test/www/public
// cd src /Users/xiao/work/test/www/public/src
// cd .. /Users/xiao/work/test/www/public
复制代码

resolve操作相当于进行了一系列的cd操作,

区别

1、join是把各个path片段连接在一起, resolve把‘/’当成根目录

path.join('/a', '/b'); 
// /a/b
path.resolve('/a', '/b');
// /b
复制代码

2、resolve在传入非/路径时,会自动加上当前目录形成一个绝对路径,而join仅仅用于路径拼接

// 当前路径为
/Users/xiao/work/test
path.join('a', 'b', '..', 'd');
// a/d
path.resolve('a', 'b', '..', 'd');
// /Users/xiao/work/test/a/d
复制代码

可以看出resolve在传入的第一参数为非根路径时,会返回一个带当前目录路径的绝对路径。

转载于:https://juejin.im/post/5cfc96c5f265da1b8333805a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值