path.resolve和path.resolve的用法

前言:要搞清楚path.join()和path.resolve的具体作用,最好自己搞个文件,用node跑一遍去测试一下。只有自己亲自动手实践了,才知道具体是怎么回事,才能真正的理解

一、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');
const path5 = path.join(__dirname,'../public') //Users/xiao/work/public  join碰到../也会跳出 


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

 

二、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操作。

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     .. 的意思似乎是取消

三、区别

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在传入的第一个参数为非根路径时,会返回一个带当前目录的绝对路径。

 

 

__dirname 表示当前文件所在的目录的绝对路径

process.cwd()  返回运行当前脚本的工作目录的路径

 

 

参考:path.join()和path.resolve()的区别

node中__dirname、__filename、process.cwd()、process.chdir()表示的路径

 

posted @ 2022-07-21 15:03  飞向火星  阅读(2886)  评论(0编辑  收藏  举报