前言:要搞清楚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()表示的路径

path.resolve和path.resolve的用法的更多相关文章

  1. Mac配置Qt环境——Could not resolve SDK path for 'macosx10.8'

    前言:解决在Mac端安装Qt后,出现的Could not resolve SDK path for 'macosx10.8'的配置信息. 首先,发现问题之前,先搜索一下.但是搜索的结果都是说,找到配置 ...

  2. 小tips:path的join和resolve的使用区别

    1.连接路径:path.join([path1][, path2][, ...]) path.join()方法可以连接任意多个路径字符串.要连接的多个路径可做为参数传入. path.join()方法在 ...

  3. node模块之path——path.join和path.resolve的区别

    1.path.join([...paths]) path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径. 长度为零的 path 片段会被忽略. 如果 ...

  4. path的join和resolve的使用区别

    文章目录   1.连接路径:path.join([path1][, path2][, ...]) 2.路径解析:path.resolve([from ...], to) 3.对比 1.连接路径:pat ...

  5. path的join和resolve

    连接路径:path.join([path1][, path2][, ...]) path.join()方法可以连接任意多个路径字符串.要连接的多个路径可做为参数传入. path.join()方法在接边 ...

  6. path.join()与path.resolve()区别

    1.path.resolve([...paths]) path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径. 给定的路径的序列是从右往左被处理的,后面每个 path 被依次 ...

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

    在说path.join()和path.resolve()的区别之前,我先说下文件路径/和./和../之间的区别 /代表的是根目录: ./代表的是当前目录: ../代表的是父级目录. 然后再来说下pat ...

  8. path.resolve和path.join的区别

    // test.js const path = require('path') let x1 = path.resolve('/目录1/目录2', '/目录3/目录4/') let x2 = path ...

  9. sys.path.insert(0,"/path") 的用法

    可以选择用sys.path.insert(0,‘/path’),这样新添加的目录会优先于其他目录被import检查

  10. sys.path和os.path

    sys.path和os.path1.sys.path是python搜索模块的路径集合,是个list:os.path是os的一个模块,是操作文件和目录的模块 2.sys.path和PYTHONPATH首 ...

随机推荐

  1. ASP.NET Core - 依赖注入(一)

    1. Ioc 与 DI Ioc 和DI 这两个词大家都应该比较熟悉,这两者已经在各种开发语言各种框架中普遍使用,成为框架中的一种基本设施了. Ioc 是控制反转, Inversion of Contr ...

  2. C4模型,架构设计图的脚手架,你值得拥有

    hi,我是熵减,见字如面. 对于软件开发团队来说,写软件设计文档,花架构图,是日常工作中的关键一项. 而其中,如何画好系统设计的架构图呢? Simon Brown 就 提出 C4 模型,来解决这个问题 ...

  3. P3387 缩点

    \(Tarjan\) 模板 #include<cstdio> #include<queue> #include<iostream> #define re regis ...

  4. 如何在VC++ 6.0中实现拖动指令改变执行路径?

    前文提要: 在VC6.0之后出现的VS系列开发工具都具有的调试功能:移动指针更改执行流,VC6不支持这个UI操作. 调试程序暂停时,源代码或"反汇编"窗口边距处的黄色箭头标记要运行 ...

  5. Word 文本转换为表格

    文本转换为表格的功能,首先点击"插入"选项卡"表格"组中的"表格"下拉按钮,打开下拉列表中选择"文本转换成表格"选项.

  6. Ansible介绍以及基于角色搭建LNMP和zabbix

    1 ansible 常用指令总结,并附有相关示例. /usr/bin/ansible 主程序,临时命令执行工具 /usr/bin/ansible-doc 查看配置文档,模块功能查看工具,相当于man ...

  7. CGLB动态代理

    CGLB动态代理 一.CGLIB实现接口 public interface ProductInterface { void test(); } /** * 用来测试接口 */ private stat ...

  8. mysql查询重复的数据

    ---查询重复的数据 . UUID可以换成其他的需要去重的字段. 点击查看代码 select * FROM t_gzmx_reptile_receive_incre WHERE id NOT IN ( ...

  9. s-hr实现单点登录,看我这份笔记就够了!!!

    https://pan.kingdee.com/s/MTA5ODk4NyxjNzk1来自:云之家企业云盘

  10. mysql数据库新建用户,并赋予权限

    新建用户: CREATE USER 'testuser'@'LOCALHOST' IDENTIFIED BY '123456'; 赋予权限: grant select on *.* to 'testu ...