path.join vs path.resolve with __dirname

新手上路,请多包涵

path.joinpath.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 许可协议

阅读 321
1 个回答

是的,功能之间存在差异,但在这种情况下您使用它们的方式将产生相同的结果。

path.join 通过将两条路径合并在一起返回规范化路径。它可以返回绝对路径,但不一定总是这样做。

例如:

 path.join('app/libs/oauth', '/../ssl')

解析为 app/libs/ssl

path.resolve 另一方面,将解析为绝对路径。

例如,当您运行时:

 path.resolve('bar', '/foo');

返回的路径将是 /foo 因为这是可以构造的第一个绝对路径。

但是,如果您运行:

 path.resolve('/bar/bae', '/foo', 'test');

返回的路径将再次是 /foo/test 因为这是可以从右到左形成的第一个绝对路径。

如果您不提供指定根目录的路径,则赋予 resolve 函数的路径将附加到当前工作目录。因此,如果您的工作目录是 /home/mark/project/

 path.resolve('test', 'directory', '../back');

解决为

/home/mark/project/test/back

使用 __dirname 是包含源文件的目录的绝对路径。当您使用 path.resolvepath.join 时,如果您在 __dirname 之后给出相同的路径,它们将返回相同的结果。在这种情况下,这实际上只是一个偏好问题。

原文由 Mike 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题