如何检查路径是绝对路径还是相对路径

Man*_*rio 27 javascript directory path absolute node.js

UNIX绝对路径以'/'开头,而Windows以字母'C:'或'\'开头.node.js是否有标准的多平台函数来检查路径是绝对路径还是相对路径?

chr*_*sse 31

从节点版本0.12.0开始,您可以使用路径模块中的path.isAbsolute(path) 功能.

即:

var path = require('path');
if(path.isAbsolute(myPath)) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

  • @SproutCoder 这个答案是正确的。也许您正在考虑 http URL 意义上的相对路径?Node.js 实用程序`path.isAbsolute` 旨在用于文件系统路径,根据定义,“绝对路径”以斜杠开头。例如,请参见 http://www.linfo.org/path.html。 (5认同)
  • 请注意isAbsolute似乎对于以/开头的任何路径都返回true,无论是在Windows还是Mac上(不确定*nix) (2认同)

Den*_*ret 9

你可以用

path.resolve(yourPath)===yourPath
Run Code Online (Sandbox Code Playgroud)

如果您的路径未规范化,请使用

path.resolve( yourPath ) == path.normalize( yourPath )
Run Code Online (Sandbox Code Playgroud)

  • 即使我没有在文档中找到它并且它似乎不可用,源代码中也有一个isAbsolute函数:https://github.com/joyent/node/blob/master/lib/path.js# L206 (3认同)
  • 如果`yourPath`尚未规范化(例如:它不适用于`/// a //..// b //`,这不起作用.相应的解决方案是:`path.resolve(yourPath) )== path.normalize(yourPath)` (3认同)
  • 该函数实际上处于不稳定状态(0.11)但不是最后一个稳定状态. (2认同)

peo*_*oro 9

正如对破坏的答案所评论的那样,如果绝对路径尚未规范化(例如路径:),则建议的解决方案不起作用///a//..//b//./.

正确的解决方案是:

path.resolve(yourPath) === path.normalize(yourPath)
Run Code Online (Sandbox Code Playgroud)

正如Marc Diethelm在评论中所暗示的那样,这仍有一些问题,因为path.resolve删除尾随斜线而path.normalize不是.

我不确定这些函数是如何完全表现的(正如你在评论中看到的那样),无论如何,以下代码片段似乎至少在Linux环境中工作正常:

path.resolve(yourPath) === path.normalize(yourPath).replace( RegExp(path.sep+'$'), '' );
Run Code Online (Sandbox Code Playgroud)