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

1.path.join([...paths])

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

长度为零的 path 片段会被忽略。 如果连接后的路径字符串是一个长度为零的字符串,则返回 ‘.‘,表示当前工作目录。

以上是nodejs官方文档上的描述。我们可以抓取几个关键字,“平台特定的分隔符”、“path片段”, “规范化”。

“平台特定的分隔符”:

  windows下文件路径分隔符使用的是"\"

  Linux下文件路径分隔符使用的是"/"

“path片段”:即是说,该方法接收的是多个路径的部分或全部,然后简单将其拼接。

“规范化”:顾名思义,如果你给出的路径片段中任一路径片段不是一个字符串,则抛出TypeError。

我们来举个例子:

path.join(‘/foo‘, ‘bar‘, ‘baz/asdf‘, ‘quux‘, ‘..‘);
// 返回: ‘/foo/bar/baz/asdf‘

这里需要注意:如果路径中出现"..",那么它前面的路径片段将被丢失。

2.path.resolve([from....],to)

path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径。

给定的路径的序列是从右往左被处理的,后面每个 path 被依次解析,直到构造完成一个绝对路径。 例如,给定的路径片段的序列为:/foo、/bar、baz,则调用 path.resolve(‘/foo‘, ‘/bar‘, ‘baz‘) 会返回 /bar/baz。

如果处理完全部给定的 path 片段后还未生成一个绝对路径,则当前工作目录会被用上。

生成的路径是规范化后的,且末尾的斜杠会被删除,除非路径被解析为根目录。

长度为零的 path 片段会被忽略。

如果没有传入 path 片段,则 path.resolve() 会返回当前工作目录的绝对路径。

以上是nodejs官方文档上的描述。

简单来说,其处理方式类似于对这些路径逐一进行cd操作,与cd操作不同的是,这些引起来的路径可以是文件,并且可以不必实际存在(resolve()方法不会利用底层的文件系统判断路径是否存在,而只是进行路径字符串操作)。

举个例子:

path.resolve(‘/foo/bar‘, ‘./baz‘);
// 返回: ‘/foo/bar/baz‘

path.resolve(‘/foo/bar‘, ‘/tmp/file/‘);
// 返回: ‘/tmp/file‘

path.resolve(‘wwwroot‘, ‘static_files/png/‘, ‘../gif/image.gif‘);
// 如果当前工作目录为 /home/myself/node,
// 则返回 ‘/home/myself/node/wwwroot/static_files/gif/image.gif‘

总结一下:path.join只是简单的将路径片段进行拼接,并规范化生成一个路径,而path.resolve则一定会生成一个绝对路径,相当于执行cd操作。

原文地址:https://www.cnblogs.com/zyl-Tara/p/9765673.html

时间: 2024-10-05 08:40:44

node模块之path——path.join和path.resolve的区别的相关文章

path.join()和path.resolve()的区别

现在写代码的时候有时候使用path.join(__dirname,'dist')有时候用path.resolve(__dirname,'dist'),都是能拼接处来一个绝对路径,但是具体有什么区别呢? 一.path.join()方法 path.join()方法是将多个参数字符串合并成一个路径字符串 console.log(path.join(__dirname,'a','b'));   假如当前文件的路径是E:/node/1,那么拼接出来就是E:/node/1/a/b. console.log(

path的join和resolve的使用区别

文章目录 1.连接路径:path.join([path1][, path2][, ...]) 2.路径解析:path.resolve([from ...], to) 3.对比 1.连接路径:path.join([path1][, path2][, ...]) path.join()方法可以连接任意多个路径字符串.要连接的多个路径可做为参数传入. path.join()方法在接边路径的同时也会对路径进行规范化.例如: var path = require('path'); //合法的字符串连接 p

Python os.path.dirname(__file__) os.path.join(str,str)

Python os.path.dirname(__file__) Python os.path.join(str,str) (1).当"print os.path.dirname(__file__)"所在脚本是以完整路径被运行的, 那么将输出该脚本所在的完整路径,比如: python d:\pythonSrc\test\test.py 那么将输出 d:\pythonSrc\test (2).当"print os.path.dirname(__file__)"所在脚本

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

1.path.resolve([...paths]) path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径. 给定的路径的序列是从右往左被处理的,后面每个 path 被依次解析,直到构造完成一个绝对路径. 例如,给定的路径片段的序列为:/foo./bar.baz,则调用 path.resolve('/foo', '/bar', 'baz') 会返回 /bar/baz. 如果处理完全部给定的 path 片段后还未生成一个绝对路径,则当前工作目录会被用上. 生成的路径是规

在 electron-vue 中的 Windows 下的路径问题,path.resolve 替换为 path.posix.join 。

起因很简单,如下代码在 Windows 的 electron-vue 会发生如下问题,别问我为什么,我也很迷茫,有如下相关代码. return path.resolve(this.basePath, routePath) // return path.join(this.basePath, routePath) // return path.posix.join(this.basePath, routePath) return path.resolve(this.basePath, routeP

Python:关于os.path.isdir,os.path.exists,os.walk无法识别“~/" HOME目录的问题。

在编写Python脚本的时候,我发现,os.path.isdir,os.path.exists,os.walk 根本无法识别 ‘~/‘ 表示的HOME目录.例如: Python 2.7.12 (default, Jul 18 2016, 10:55:51) [GCC 6.1.1 20160621 (Red Hat 6.1.1-3)] on linux2 Type "help", "copyright", "credits" or "li

os.path.abs()与os.path.realpath()的一点区别

相同点 1. 两者都是返回绝对路径,如果参数path为空,则返回当前文件所在目录的绝对路径 当前py文件所在的目录是revise print(os.path.abspath("")) print(os.path.realpath("")) 运行结果: D:\python_workshop\python6\revise D:\python_workshop\python6\revise 2. 如果给一个不存在的文件名作为相对路径的path,会将当前所在目录和文件名拼接

安装vmware-tools遇the path "" is not valid path to the gcc binary和the path "" is not a valid path to the 3.10.0-327.e17.x86_64 kernel headers问题解决

#./vmware-install.pl踩点: 1.the path "" is not valid path to the gcc binary 2.the path "" is not a valid path to the 3.10.0-327.e17.x86_64 kernel headers 2.原因分析 Linux操作系统上gcc没有安装. Linux操作系统上uek kernel没有安装. 3.处理方法 # yum install gcc* //加载编

【转】Commonjs规范及Node模块实现

前言: Node在实现中并非完全按照CommonJS规范实现,而是对模块规范进行了一定的取舍,同时也增加了少许自身需要的特性.本文将详细介绍NodeJS的模块实现 引入 nodejs是区别于javascript的,在javascript中的顶层对象是window,而在node中的顶层对象是global [注意]实际上,javascript也存在global对象,只是其并不对外访问,而使用window对象指向global对象而已 在javascript中,通过var a = 100:是可以通过wi