详解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 相关文章推荐
XRegExp 0.2: Now With Named Capture
Nov 30 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
Jan 08 Javascript
jquery图片不完全按比例自动缩小的简单代码
Jul 29 Javascript
jQuery带箭头提示框tooltips插件集锦
Nov 17 Javascript
jQuery动画与特效详解
Feb 01 Javascript
JS实现文档加载完成后执行代码
Jul 09 Javascript
js流动式效果显示当前系统时间
May 16 Javascript
微信小程序 定位到当前城市实现实例代码
Feb 23 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
May 09 Javascript
详解vue跨组件通信的几种方法
Jun 15 Javascript
JS实现的排列组合算法示例
Jul 16 Javascript
在layui中layer弹出层点击事件无效的解决方法
Sep 05 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学习笔记之字符串编码的转换和判断
2014/05/22 PHP
php返回json数据函数实例
2014/10/09 PHP
php查找字符串出现次数的方法
2014/12/01 PHP
Yii框架弹出框功能示例
2017/01/07 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
PHP实现的大文件切割与合并功能示例
2018/04/10 PHP
laravel5实现微信第三方登录功能
2018/12/06 PHP
Laravel框架源码解析之模型Model原理与用法解析
2020/05/14 PHP
javascript入门·对象属性方法大总结
2007/10/01 Javascript
利用jQuery的$.event.fix函数统一浏览器event事件处理
2009/12/21 Javascript
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
JavaScript DOM事件(笔记)
2015/04/08 Javascript
在JavaScript中处理时间之getHours()方法的使用
2015/06/10 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
AngularJS入门教程之过滤器用法示例
2016/11/02 Javascript
jQuery操作css样式
2017/05/15 jQuery
JS 验证码功能的三种实现方式
2018/11/26 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
2019/05/09 Javascript
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
python Django批量导入数据
2016/03/25 Python
总结python爬虫抓站的实用技巧
2016/08/09 Python
使用Python从零开始撸一个区块链
2018/03/14 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
Python使用jupyter notebook查看ipynb文件过程解析
2020/06/02 Python
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python
JavaScript实现音乐播放器
2022/08/14 Javascript