【问题标题】:Nodejs difference between ./folderpath vs ../folderpath./folderpath 与 ../folderpath 之间的 Nodejs 区别
【发布时间】:2018-04-18 11:05:32
【问题描述】:

我是 nodejs 的新手。我尝试在我的文件系统中使用一些文件。我想让他们通过一些真实的路径。这是结构:

-app
  -resources
    -tmp
      -file1
      -file2
  -common
    -common.js
  -etc

所以,我想从 int common 文件夹中的 common.js 文件访问我的 resources/tmp 文件夹中的 file1 和 file2。我使用了两个相对路径有条不紊:

// First , wrong one
var tmpfolder = '../resources/tmp';

// Second, good one
var tmpfolder = './resources/tmp';

文件绝对路径是这样的:

C:\Users\xy\Documents\work\nodejs\projects\project_wrapper_folder\project_folder\resources\tmp

如果我记录第一个相对路径,我会得到这个结果:

C:\Users\xy\Documents\work\nodejs\projects\project_folder\resources\tmp

这是错误的,因为它不包含包装文件夹。

但第二个工作正常。 有人可以解释一下这种行为吗?


更新

我明白'../'的意思了,谢谢你的解释!

我已经尝试过@Lissy 的回答:“记住这一点。/ 将解决您的项目根目录的价值......”这听起来不错,但结果并非如此。 我的应用中有这个逻辑:

var tmpfolder = require('./otherFolder/orhetFile');

其中 otherFolder 是我的 project_folder 的子文件夹。所以,当我在这里使用它时,我得到了一个名为 Cannot find module ...

的错误

但是如果我在 fs 模块中使用这个'./',这里:/project_folder/otherFolder_2/otherFile_2 就像:

var path = `./resources/tmp`;
fs.mkdirsSync(path);

有效!

这些对我来说很奇怪。如果 './' 表示当前文件夹,则上面的示例不起作用(但它有效)。 但是如果 './' 表示项目根目录的路径,那么带有 require 的示例应该可以工作(但不工作)。

奇怪,require 或 fs 有什么意思吗??

【问题讨论】:

  • Dots in url or path的可能重复
  • 您能否多发一些代码,因为在 Node 中读取文件的不同方法的工作方式略有不同?

标签: node.js filesystems windows-10 fs


【解决方案1】:

.. 表示上一个目录。所以你从 project_wrapper_folder 出来,然后添加到脚本目录 resources\tmp 这样 project_wrapper_folder 不再在相对路径中.

【讨论】:

    【解决方案2】:

    假设您位于名为 app 的文件夹中。

    当您使用../resources/tmp 时,它会从app 文件夹中出来,并在resources 文件夹中搜索tmp

    当您使用./resources/tmp 时,它会在app 文件夹中查找resources 文件夹和其中的tmp

    【讨论】:

      【解决方案3】:

      总结

      ./my-file 表示查看根目录,而../my-file 表示退出当前目录,查看父文件夹。

      Node.js中相对路径和绝对路径的解释

      默认文档根目录是使用NODE_PATH 环境变量设置的(但是修改它会很糟糕)。因此,请记住./ 将解析为您的项目根目录的价值。

      所以let tmpfolder = require('./resources/tmp'); 将解析为 C:\Users\......\project_wrapper_folder\project_folder\resources\tmp 如你所见

      不以./ 开头表示相对路径,因此例如let tmpfolder = require('my-scripts/some-script'); 将在当前目录中查找另一个名为my-scripts 的文件夹。

      接着../ 是相对于当前目录的,但从那里出来(到它的父目录)并从那里查看。您可以通过执行../../my-dir 等来输出两个目录(但这不是很好的做法,因为如果您有../../../../../../,它可能很难管理)

      更好的方法

      您可以使用 Node 中的__dirname 常量来定位当前模块的目录名称。 例如 fs.readFile(__dirname + '/../foo.bar');

      有用的链接

      我认为您会发现Better local require() paths for Node.js 上的这篇文章非常有用。

      另外,为了进一步阅读,这里是official Node.js documentation on paths

      【讨论】:

        【解决方案4】:

        ../ 指向父目录,./ 指向当前工作目录。

        【讨论】:

          【解决方案5】:

          点基本上意味着“回到路径中的一个文件夹”

          所以: './' 指向你所在的文件夹。(在你的情况下是文件夹 common/)

          '../' 指向包含您所在文件夹的文件夹。(在您的情况下为文件夹 app/)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-29
            • 2016-10-07
            • 2017-10-17
            • 1970-01-01
            • 2017-02-27
            相关资源
            最近更新 更多