Node.js中path.normalize和path.resolve之间的区别

BMi*_*ner 84 path node.js

是什么区别(如果有的话)path.normalize(your_path)path.resolve(your_path)

我知道path.resolve(...)可以接受多个参数,但是单个参数的行为与调用相同path.normalize()吗?

编辑:如果他们应该以相同的方式行事,我不明白path.normalize(...)当你可以简单地将路径传递给path.resolve(...)Or 时暴露函数的目的,也许,它是出于文档目的.例如,他们在文档中说path.resolve(...):

...生成的路径被标准化,并且......

暴露path.normalize(...)使得更容易解释什么"规范化"意味着??? 我不知道.

Mic*_*ley 176

path.normalize摆脱的多余.,..在路径等.path.resolve将路径解析为绝对路径.示例(我当前的工作目录是/Users/mtilley/src/testing):

> path.normalize('../../src/../src/node')
'../../src/node'
> path.resolve('../../src/../src/node')
'/Users/mtilley/src/node'
Run Code Online (Sandbox Code Playgroud)

换句话说,path.normalize"我可以采取的最短路径是什么,将我带到与输入相同的位置",而path.resolve"如果我走这条路,我的目的地是什么".

不过要注意的path.normalize()很多更多的上下文无关比path.resolve().有path.normalize()过上下文悬挂(即,如果它已经考虑到当前的工作目录),结果在上面的例子中会一直../node,因为这是一个可以采取从最短路径/Users/mtilley/src/testing/Users/mtilley/src/node.

具有讽刺意味的是,这意味着path.resolve()以绝对值产生相对路径(您可以在任何地方执行它,并且它会产生相同的结果),而path.normalize()相对而言产生绝对路径(您必须在相对于您想要的路径中执行它)计算绝对结果).

  • 另请注意,path.normalize可以处理您可能要规范化的任何路径,并且仅表示路径的字符串操作,而path.resolve将使用filesystem和current目录来解析绝对路径的路径.这使得它们的行为完全不同,因为path.normalize可能用于tar文件内的路径,远程文件系统或完全抽象的东西. (14认同)