详解Node.js中path模块的resolve()和join()方法的区别


Posted in Javascript onOctober 29, 2018

关于Node.js中path模块的resolve()和join()方法的比较,对照着总结看例子差不多以后在写模块的时候思路就能很清晰了

resolve

作用:path.resolve() 该方法将一些的 路径/路径段 解析为绝对路径。

语法:path.resolve([...paths])

说明:

  • ...paths <string> 一个路径或路径片段的序列
  • 如果没有传入 path 片段,或者path 片段长度为零(空字符),则 path.resolve() 会返回当前工作目录的绝对路径(相当于使用path.resolve(__dirname))

例子:我当前的工作路径为/workspace/demo

console.log(path.resolve())      // returns /workspace/demo
console.log(path.resolve(''))     // returns /workspace/demo
console.log(path.resolve(__dirname)) // returns /workspace/demo
console.log(path.resolve('/img/books', '/net'))  // returns '/net'
console.log(path.resolve('img/books', '/net'))  // returns '/net'
console.log(path.resolve('img/books', './net'))  // returns '/workspace/demo/img/books/net'
console.log(path.resolve('/img/books', './net'))  // returns '/img/books/net'
console.log(path.resolve('/img/books', 'net'))   // returns '/img/books/net'
console.log(path.resolve('/img/books', '../net'))     // returns '/img/net'
console.log(path.resolve('src','/img/books', '../net'))  // returns '/img/net'
console.log(path.resolve('src','./img/books', '../net'))  // returns '/workspace/demo/src/img/net'
console.log(path.resolve('src','img/books', '../net'))   // returns '/workspace/demo/src/img/net'

总结一下:从后向前,若字符以 / 开头,不会拼接到前面的路径;若以 ../ 开头,拼接前面的路径,但是不含前面一节的最后一层路径;若以 ./ 开头 或者没有符号 则拼接前面路径;

join

作用:path.join()方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径。

语法:path.resolve([...paths])

说明:

  • ...paths <string> 一个路径或路径片段的序列
  • 长度为零的 path 片段会被忽略。 如果连接后的路径字符串是一个长度为零的字符串,则返回 '.',表示当前工作目录

例子:

path.join('/img', 'book', 'net/abc', 'inter', '..'); // returns /img/book/net/abc
console.log(path.join('/img/books', '../net'))  // returns /img/net
console.log(path.join('img/books', '../net'))   // returns img/net
console.log(path.join('/img/books', './net'))   // returns /img/books/net
console.log(path.join('img/books', './net'))   // returns img/books/net
console.log(path.join('/img/books', 'net'))    // returns /img/books/net
console.log(path.join('img/books', 'net'))    // returns /img/books/net
console.log(path.join('/img/books', '/net'))   // returns /img/books/net
console.log(path.join('img/books', '/net'))    // returns img/books/net

总结一下 区别:join()只是拼接各个path片段,并不像resolve()一样除了拼接各个字段还拼接了工作目录的路径,其次如果以/开头的字符串片段在join并不像resolve一样是只返回自身,还有就是.. 同 ../是一个意思都代表上一级目录

两者区别:

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

path.join('/a', '/b') // Outputs '/a/b'
path.resolve('/a', '/b') // Outputs '/b'

2、join直接拼接字段,resolve解析路径并返回

path.join("a", "b1", "..", "b2")

console打印会得到"a/b2"

path.resolve("a", "b1", "..", "b2")

console打印得到"/home/myself/node/a/b2"

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
CheckBox 如何实现全选?
Jun 23 Javascript
JavaScript常用对象的方法和属性小结
Jan 24 Javascript
图片翻转效果具体实现代码
Jan 09 Javascript
jQuery使用andSelf()来包含之前的选择集
May 19 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
Oct 16 Javascript
jQuery多级弹出菜单插件ZoneMenu
Dec 18 Javascript
JS提交form表单实例分析
Dec 10 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
Mar 01 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
Jun 07 Javascript
vuex入门最详细整理
Mar 04 Javascript
vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作
Nov 09 Javascript
JavaScript如何利用Promise控制并发请求个数
May 14 Javascript
详解vue-router数据加载与缓存使用总结
Oct 29 #Javascript
vue mounted 调用两次的完美解决办法
Oct 29 #Javascript
Electron中实现大文件上传和断点续传功能
Oct 28 #Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
Oct 28 #Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
Oct 28 #Javascript
深入浅析javascript函数中with
Oct 28 #Javascript
微信小程序动画(Animation)的实现及执行步骤
Oct 28 #Javascript
You might like
php的header和asp中的redirect比较
2006/10/09 PHP
MySQL修改密码方法总结
2008/03/25 PHP
php intval的测试代码发现问题
2008/07/27 PHP
PHP与javascript实现变量交互的示例代码
2013/07/23 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
jQuery 表单验证扩展代码(二)
2010/10/20 Javascript
validator验证控件使用代码
2010/11/23 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
python获取当前日期和时间的方法
2015/04/30 Python
django基础之数据库操作方法(详解)
2017/05/24 Python
python之virtualenv的简单使用方法(必看篇)
2017/11/25 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
Python实现自动整理文件的脚本
2020/12/17 Python
基于css3仿造window7的开始菜单
2010/06/17 HTML / CSS
交通法规咨询中心工作职责
2013/11/27 职场文书
环保建议书500字
2014/05/14 职场文书
跳蚤市场口号
2014/06/13 职场文书
身边的榜样活动方案
2014/08/20 职场文书
期末考试复习计划
2015/01/19 职场文书
iPhone13将有八大升级
2021/04/15 数码科技
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript
教你使用VS Code的MySQL扩展管理数据库的方法
2022/01/22 MySQL