【问题标题】:Node path.relative returns incorrect path节点 path.relative 返回不正确的路径
【发布时间】:2015-06-24 10:19:33
【问题描述】:

我很确定我一定是错的,但在 Node 中,path.relative 似乎输出了错误的目录,或者至少是一个我没想到的目录:

> path.relative('a/file.js', 'a/file.css')
> '../file.css'

但我希望结果类似于:

> './file.css'

本质上,我试图计算两个路径的差异,以便一个文件到 require 另一个文件和 ../file.css 对于我的要求显然是错误的,因为这两个文件都在 a 目录中。输出表明file.css 在父目录中。

我错过了什么?

【问题讨论】:

    标签: javascript node.js path filepath


    【解决方案1】:

    据我所知,path.relative() 需要一个文件夹而不是文件作为它的第一个参数。这有效:

    path.relative('a', 'a/file.css')
    > 'file.css'
    

    这是path.relative的源代码: https://github.com/joyent/node/blob/master/lib/path.js#L504-L530 https://github.com/joyent/node/blob/master/lib/path.js#L265-L304

    (注意:如果将来行号发生变化,这里是我写这篇文章时的源链接:https://github.com/nodejs/node-v0.x-archive/blob/94beb2985b4cb25e592a9ccc226f6c824a81e510/lib/path.js

    如您所见,路径由其中的斜线分隔,它只是比较部分的数量,因此如果您将文件而不是文件夹作为from 参数传递,它将不起作用。

    【讨论】:

    • 是的,我自己也想通了。我只是从文档中假设文件名可以像在其他一些path 方法中一样工作。谢谢!
    • 它实际上并不关心它是文件还是文件夹。它甚至不知道。 path.relative('a/file.js', 'a/file.css')path.relative('a/b', 'a/file.css') 一样,你只是把第二层切掉了。
    • @eush77 好点,但我认为它仍然需要一个文件夹......实际上它可能是在假设两个参数都是文件夹的情况下编写的。换句话说,该函数似乎并不是为了支持文件和文件夹作为可能的参数而编写的。
    • 是的,当from 路径的最后一部分确实是一个文件时,您是正确的,该函数实际上将它视为文件是一个目录,因此返回的路径始终是一个../太多。当to 参数中有一个文件名时,它恰好起作用,因为结果返回它认为是目录的内容(但也返回文件名)。
    • @MattBrowne path 模块使用路径名,而不是文件或目录。您无法从路径名中推断出任何内容(file.js 是一个完全有效的目录名)。 path.relative('a/file.js', 'a/file.css') 工作并非巧合,而是非常有意为之,因为如果 a/file.js 是一个子目录,那么 ../file.css 正是您想要的。同样,path.relative 不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多