Nodejs ./folderpath vs ../folderpath之间的区别

时间:2017-11-06 10:06:14

标签: node.js filesystems windows-10 fs

我是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:\用户\ XY \文件\工作\的NodeJS \项目\ project_wrapper_folder \ project_folder \资源\ TMP

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

C:\用户\ XY \文件\工作\的NodeJS \项目\ project_folder \资源\ TMP

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

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

更新

我看到了' ../'的含义,谢谢你的解释!

我已经尝试了@Lissy回答:"所以请记住./将解决你的项目根源的价值......"这听起来不错,但结果并非如此。 我在我的应用程序中有这个逻辑:

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

其中otherFolder是我的project_folder的子文件夹。所以,当我在这里使用它时,我收到一个名为无法找到模块 ...

的错误

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

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

有效!

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

对我来说很奇怪,是否存在require或fs的含义?

5 个答案:

答案 0 :(得分:1)

摘要

./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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

让我们假设您位于名为UPDATE MyTable SET highest = 1 WHERE NOT EXISTS (SELECT * FROM MyTable AS T2 WHERE T2.external_id = MyTable.external_id AND T2.value < MyTable.value); 的文件夹中。

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

点基本上意味着&#34;在路径中返回一个文件夹&#34;

所以: &#39; ./&# 39;指向您所在的文件夹。(在您的情况下,文件夹为common /)

&#39; ../&# 39;指向包含您所在文件夹的文件夹。(在您的情况下是文件夹app /)