将 path.join
和 path.resolve
与 __dirname
用于解析 Node.js 中的绝对路径时是否有区别?
在这样使用时是否应该首选其中之一(绝对路径分辨率占用例的 90%)?
IE
const absolutePath = path.join(__dirname, some, dir);
对比
const absolutePath = path.resolve(__dirname, some, dir);
两种方法都归一化路径。
原文由 Estus Flask 发布,翻译遵循 CC BY-SA 4.0 许可协议
是的,功能之间存在差异,但在这种情况下您使用它们的方式将产生相同的结果。
path.join
通过将两条路径合并在一起返回规范化路径。它可以返回绝对路径,但不一定总是这样做。例如:
解析为
app/libs/ssl
path.resolve
另一方面,将解析为绝对路径。例如,当您运行时:
返回的路径将是
/foo
因为这是可以构造的第一个绝对路径。但是,如果您运行:
返回的路径将再次是
/foo/test
因为这是可以从右到左形成的第一个绝对路径。如果您不提供指定根目录的路径,则赋予
resolve
函数的路径将附加到当前工作目录。因此,如果您的工作目录是/home/mark/project/
:解决为
/home/mark/project/test/back
使用
__dirname
是包含源文件的目录的绝对路径。当您使用path.resolve
或path.join
时,如果您在__dirname
之后给出相同的路径,它们将返回相同的结果。在这种情况下,这实际上只是一个偏好问题。