【问题标题】:how can i robustly detect a relative path in node.js我怎样才能稳健地检测 node.js 中的相对路径
【发布时间】:2013-02-28 19:28:02
【问题描述】:

也许我让它变得很难(我应该只寻找 ./../ 的前缀)但我不想重新发明轮子并编写一个函数来正确检测相对路径(适用于所有平台等)

现有库?

是否有npm 包可以做到这一点?这个问题肯定已经解决了……

接近?

除了现有的库,我的预期方法是使用path 模块函数到join 可能是已知前缀的相对路径,然后看看结果是什么,假设path.join('some_base', possiblyRelative) 允许以平台安全的方式具有某种显着特征。

还有其他建议吗?方法?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    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

    【讨论】:

    • isRelative('/foo/bar/) >> false
    • @TomDotTom '/foo/bar' 不是 linux 中的相对路径。想详细解释一下为什么您认为这是一个不正确的结果?
    • @B_T 上面的 isRelative 函数将为 '/foo/bar' 返回 false ,表明它不是相对路径。
    • @B_T 道歉,我没有注意,似乎不小心在拖钓你:-/。但是我仍然认为存在一个问题,如果您可以运行这四个示例并评论标记(在我看来)错误的那个: [OK] isRelative('foo/bar') >> true; [OK isRelative('foo/bar/') >> true; [OK] isRelative('/foo/bar') >> false; [不正确] isRelative('/foo/bar/') >> true
    【解决方案2】:

    有点晚了,但对于其他搜索相同问题的人来说:

    从节点版本 0.12.0 开始,您拥有来自 path 模块的 path.isAbsolute(path) 函数。要检测您的路径是否是相对的,请使用它的否定:

    即:

    var path = require('path');
    if( ! path.isAbsolute(myPath)) {
        //...
    }
    

    【讨论】:

      【解决方案3】:
      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)=="../"; 
      }
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-27
        • 2022-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多