我怎样才能健壮地检测node.js中的相对路径

时间:2013-03-13 01:39:31

标签: javascript node.js

也许我正在努力(我应该只寻找./../的前缀,但我不想重新发明轮子并正确编写函数检测相对路径(适用于所有平台等)

现有的图书馆?

是否有npm个包来执行此操作?当然这个问题已经解决了......

途径?

除了现有的库,我的方法是使用path模块函数来join可能相对于已知前缀的路径,然后看看结果是什么,假设{ {1}}将以平台安全的方式允许某种区别特征。

还有其他建议吗?途径?

3 个答案:

答案 0 :(得分:10)

UPDATE2:TomDotTom在这里找到了一个更健全的答案:How to check if a path is absolute or relative

这里转载(但反过来):

var path = require('path');
function isRelative(p) {
  return path.normalize(p + '/') !== path.normalize(path.resolve(p) + '/');
}

对于节点v0.12及更高版本,我建议使用path.isAbsolute

答案 1 :(得分:8)

现在有点晚了,但对于其他人在同一个问题上搜索:

从节点版本0.12.0开始,您拥有(function iteratePaths() { var dirs = []; for(var i = 0; i < _paths.length; i++) { buildDirectories(dirs, _paths[i].split('/')); } })(); function findDir(dir, obj) { for(var i = 0; i < dir.length; i++) { if(dir[i].name === obj.name) { return dir[i]; } } return undefined; } function buildDirectories(dir, subs) { if(subs.length === 0) return; var obj = {name: subs.shift(), dirs: []}; var existingDir = findDir(dir, obj); if(!existingDir) { dir.push(obj); } buildDirectories((existingDir || obj).dirs, subs); } 模块中的path.isAbsolute(path)函数。要检测您的路径是否相对,请使用它的协商:

即:

path

答案 2 :(得分:0)

function isRelative(str)
{
    //Remove quotes as it can potentially mess up the string
    str=str.replace("\'\"",'');
    return str.substring(0,2)=="./"||str.substring(0,3)=="../"; 
}

在这个例子中,我们只允许字符串路径开头的相对字符串