详解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 相关文章推荐
JS获取scrollHeight问题想到的标准问题
May 27 Javascript
理清apply(),call()的区别和关系
Aug 14 Javascript
JS实现div内部的文字或图片自动循环滚动代码
Apr 19 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
Nov 10 Javascript
使用js画图之画切线
Jan 12 Javascript
Javascript缓存API
Jun 14 Javascript
JavaScript导航脚本判断当前导航
Jul 12 Javascript
js 上传文件预览的简单实例
Aug 16 Javascript
Angularjs的键盘事件的绑定
Jul 27 Javascript
微信禁止下拉查看URL的处理方法
Sep 28 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
Mar 18 Javascript
vue父组件给子组件的组件传值provide inject的方法
Oct 23 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实现维护文件代码
2007/06/14 PHP
php 验证码制作(网树注释思想)
2009/07/20 PHP
PHP之uniqid()函数用法
2014/11/03 PHP
javascript编程起步(第六课)
2007/02/27 Javascript
比较新旧两个数组值得增加和删除的JS代码
2013/10/30 Javascript
浅析JavaScript中的delete运算符
2013/11/30 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
2015/03/04 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
2016/11/16 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
浅谈js中的变量名和函数名重名
2017/02/13 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
教你如何用node连接redis的示例代码
2018/07/12 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
JS中作用域以及变量范围分析
2020/07/18 Javascript
Python自动化运维和部署项目工具Fabric使用实例
2016/09/18 Python
selenium+python环境配置教程详解
2019/05/28 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
软件测试工程师结构化面试题库
2016/11/23 面试题
酒店中秋节促销方案
2014/01/30 职场文书
党的群众路线教育实践活动批评与自我批评
2014/02/16 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
监察建议书
2015/02/04 职场文书
故意杀人案辩护词
2015/05/21 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
只用40行Python代码就能写出pdf转word小工具
2021/05/31 Python
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis