path.join与path.resolve和__dirname
同时使用path.join
和path.resolve
以及__dirname
parsingNode.js中的绝对path时是否有区别?
如果像这样使用其中的一个(绝对path分辨率是90%的用例)?
即
const absolutePath = path.join(__dirname, some, dir);
与
const absolutePath = path.resolve(__dirname, some, dir);
两种方法都规范化path。
这不是这个问题的重复,因为接受的答案是错误的。
是的,这些function之间是有区别的,但是在这种情况下如何使用它们将导致相同的结果。
path.join
通过将两个path合并在一起path.join
返回一个规范化的path。 它可以返回一个绝对path,但不一定总是这样做。
例如:
path.join('app/libs/oauth', '/../ssl')
parsing为app/libs/ssl
另一方面, path.resolve
将parsing为绝对path。
例如,当你运行:
path.resolve('bar', '/foo');
返回的path将是/foo
因为这是可以构build的第一个绝对path。
但是,如果您运行:
path.resolve('/bar/bae', '/foo', 'test');
返回的path将会是/foo/test
,因为这是从右到左形成的第一个绝对path。
如果您没有提供指定根目录的path,则赋予resolve
函数的path将附加到当前工作目录。 所以如果你的工作目录是/home/mark/project/
:
path.resolve('test', 'directory', '../back');
解决
/home/mark/project/test/back
使用__dirname
给出了当前工作目录的绝对path。 当您使用path.resolve
或path.join
,如果在__dirname
提供相同的path,它们将返回相同的结果。 在这种情况下,这实际上只是一个偏好问题。
const absolutePath = path.join(__dirname, some, dir);
与
const absolutePath = path.resolve(__dirname, some, dir);
path.join
将连接__dirname,它是当前文件与some
和dir
值连接的目录名称与特定于平台的分隔符
在哪里
path.resolve
将处理__dirname
, some
和dir
即从左到右,通过处理它。
如果some
或dir
任何值对应于一个根path,那么之前的path将被省略,并且通过将其视为根
为了更好地理解概念,让我解释一下两点细节如下:
path.join
和path.resolve
是nodejs提供的path模块的两种不同的方法或function。
在哪里都接受一个path列表,但差异在于结果,即他们如何处理这些path。
path.join
使用特定于平台的分隔符作为分隔符将所有给定的path段连接在一起,然后规范化结果path。 而path.resolve()
则从右向左处理path序列,每个后续path都被预置,直到构build绝对path。
当没有参数提供
下面的例子将帮助你清楚地理解这两个概念:
我的文件名是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
结果
λ node index.js path.join() : . path.resolve() : E:\MyFolder\Pjtz\node
path.resolve()
方法将输出path.join()
返回的绝对path。 代表当前的工作目录,如果没有提供
当一些根path作为parameter passing时
const path=require('path'); console.log("path.join() : " ,path.join('abc','/bcd')); console.log("path.resolve() : ",path.resolve('abc','/bcd'));
结果i
λ node index.js path.join() : abc\bcd path.resolve() : E:\bcd
path.join()
仅将input列表与平台特定的分隔符连接在一起,而path.resolve()
则从右向左处理path序列,每个后续path都被预置,直到构build绝对path。