是否有区别使用时都 path.join和path.resolve同__dirname在Node.js的解决绝对路径?
如果使用它们中的一个是首选(绝对路径分辨率是用例的90%)?
即
const absolutePath = path.join(__dirname, some, dir);
Run Code Online (Sandbox Code Playgroud)
与
const absolutePath = path.resolve(__dirname, some, dir);
Run Code Online (Sandbox Code Playgroud)
两种方法都规范化路径.
这不是这个问题的重复,因为接受的答案是错误的.
Mik*_*ike 123
是的,功能之间存在差异,但在这种情况下使用它们的方式将产生相同的结果.
path.join通过将两个路径合并在一起来返回规范化路径.它可以返回绝对路径,但并不总是这样做.
例如:
path.join('app/libs/oauth', '/../ssl')
Run Code Online (Sandbox Code Playgroud)
解决了 app/libs/ssl
path.resolve另一方面,将解决绝对的道路.
例如,当你运行:
path.resolve('bar', '/foo');
Run Code Online (Sandbox Code Playgroud)
返回的路径将是,/foo因为这是可以构造的第一个绝对路径.
但是,如果你运行:
path.resolve('/bar/bae', '/foo', 'test');
Run Code Online (Sandbox Code Playgroud)
返回的路径将/foo/test再次出现,因为这是可以从右到左形成的第一条绝对路径.
如果未提供指定根目录的路径,则为该resolve函数指定的路径将附加到当前工作目录.所以如果你的工作目录是/home/mark/project/:
path.resolve('test', 'directory', '../back');
Run Code Online (Sandbox Code Playgroud)
解决了
/home/mark/project/test/back
使用__dirname是包含源文件的目录的绝对路径.当您使用path.resolve或者path.join如果您给出相同的路径,它们将返回相同的结果__dirname.在这种情况下,这只是一个偏好问题.
sam*_*j90 17
const absolutePath = path.join(__dirname, some, dir);
Run Code Online (Sandbox Code Playgroud)
与
const absolutePath = path.resolve(__dirname, some, dir);
Run Code Online (Sandbox Code Playgroud)
path.join将串连__dirname这与值级联当前文件的目录名some,并dir与特定平台的分隔符.
在哪里
path.resolve将处理__dirname,some并且dir由左到右,即通过处理它前面加上它.
如果根路径的任何值some或dir对应于根路径,则将省略前一路径并通过将其视为根来处理休息
为了更好地理解这个概念,让我更详细地解释如下: -
的path.join和path.resolve是两个不同的方法或通过提供的NodeJS路径模块的功能.
两者都接受路径列表但差异来自结果,即它们如何处理这些路径.
path.join使用特定于平台的分隔符作为分隔符将所有给定路径段连接在一起,然后规范化生成的路径.而path.resolve()过程是从右到左的路径序列,每个后续路径都被预先加上,直到构造出绝对路径.
没有提供参数时
以下示例将帮助您清楚地理解这两个概念: -
我的文件名是index.js,当前的工作目录是E:\MyFolder\Pjtz\node
const path = require('path');
console.log("path.join() : ", path.join());
// outputs .
console.log("path.resolve() : ", path.resolve());
// outputs current directory or equalent to __dirname
Run Code Online (Sandbox Code Playgroud)
结果
? node index.js
path.join() : .
path.resolve() : E:\MyFolder\Pjtz\node
Run Code Online (Sandbox Code Playgroud)
path.resolve()方法将输出绝对路径作为path.join()返回.表示当前工作目录,如果没有提供任何内容
当一些根路径作为参数传递时
const path=require('path');
console.log("path.join() : " ,path.join('abc','/bcd'));
console.log("path.resolve() : ",path.resolve('abc','/bcd'));
Run Code Online (Sandbox Code Playgroud)
结果我
? node index.js
path.join() : abc\bcd
path.resolve() : E:\bcd
Run Code Online (Sandbox Code Playgroud)
path.join()仅将输入列表与特定于平台的分隔符连接,同时path.resolve()处理从右到左的路径序列,每个后续路径前置,直到构造绝对路径.
来自文档path.resolve:
生成的路径被规范化并删除尾部斜杠,除非路径解析为根目录。
但path.join一直尾随斜杠
所以
__dirname = '/';
path.resolve(__dirname, 'foo/'); // '/foo'
path.join(__dirname, 'foo/'); // '/foo/'
Run Code Online (Sandbox Code Playgroud)
用最简单的话来说:
当您使用时path.resolve()它返回绝对路径如下
from left to right-
/直接与根路径连接起来以形成绝对路径(检查示例)/作为目录例如
path.resolve('/a', 'b', 'c'); returns C:\a\b\c
path.resolve('/a', '/b', 'c'); returns C:\b\c
path.resolve('/a', '/b', '/c'); returns C:\c
Run Code Online (Sandbox Code Playgroud)
使用时join()只需从左到右连接每个参数,无论它们/是否有
path.join("/a", "b", "/c", "d") simply returns "\a\b\c\d"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75213 次 |
| 最近记录: |