NodeJs与./folderpath与../folderpath之间的区别
我是nodejs中的新手。 我尝试在我的文件系统中使用一些文件。 我想通过一些实际的path让他们。 这里是结构:
-app -resources -tmp -file1 -file2 -common -common.js -etc
所以,我想从int common文件夹中的common.js文件的resources / tmp文件夹中到达file1和file2。 我用了两条相对path:
// First , wrong one var tmpfolder = '../resources/tmp'; // Second, good one var tmpfolder = './resources/tmp';
文件的绝对path是这样的:
C:\用户\ XY \文件\工作\的NodeJS \项目\ project_wrapper_folder \ project_folder \资源\ tmp目录
如果我login第一个相对path,我得到了这个结果:
C:\用户\ XY \文件\工作\的NodeJS \项目\ project_folder \资源\ tmp目录
这是错误的,因为它不包含包装文件夹。
但是第二个很好。 有人可以解释我的这种行为吗?
UPDATE
我看到“../”的意思,谢谢你的解释!
我已经试过@Lissy答案:“那么记住这一点./将解决你的项目根的价值…”听起来不错,但结果不是。 我在我的应用程序中有这个逻辑:
var tmpfolder = require('./otherFolder/orhetFile');
otherFolder是我的project_folder的子文件夹。 所以,当我在这里使用这个时,我得到一个错误称为无法find模块 …
但是,如果我在fs模块中使用这个'./',在这里:/ project_folder / otherFolder_2 / otherFile_2就像:
var path = `./resources/tmp`; fs.mkdirsSync(path);
有用!
这些对我来说很奇怪。 如果'./'表示当前的文件夹,比上面的例子不能工作(但它的工作原理)。 但是,如果'./'表示项目根目录的path,则带有require的示例应该可以工作(但不起作用)。
对我来说奇怪,是否有一些require或fs的含义?
综上所述
./my-file
表示查看根目录,而../my-file
表示从当前目录中出来,然后查看父文件夹。
Node.js中相对path和绝对path的说明
默认的文档根目录是使用NODE_PATH
环境variables设置的(但是修改该目录会是一个糟糕的做法)。 因此,铭记这一点./
将解决你的项目根的价值。
所以let tmpfolder = require('./resources/tmp');
会parsing为C:\Users\......\project_wrapper_folder\project_folder\resources\tmp
如您所见
相对path不以./
开头,例如let tmpfolder = require('my-scripts/some-script');
会在当前目录中查找另一个名为my-scripts
文件夹。
从那之后../
是相对于当前目录,但出去一(对它的父母),并从那里看起来。 你可以通过执行../../my-dir
等两个目录(这是不是很好的做法,因为它可以很难pipe理,如果你有../../../../../../
)
更好的方法
您可以使用Node中的__dirname
常量来查找当前模块的目录名称。 例如fs.readFile(__dirname + '/../foo.bar');
有用的链接
我想你会发现这篇文章更好的本地require()pathNode.js非常有用。
另外,为了进一步阅读,下面是path上的官方Node.js文档
..
表示之前的dir。 所以,你要从project_wrapper_folder下载 ,然后添加到脚本dir resources \ tmp ,这样project_wrapper_folder不再处于相对path中。
让我们假设你在一个名为app
的文件夹中。
当你使用../resources/tmp
,它会从app
文件夹中find并searchtmp
resources
文件夹。
当你使用./resources/tmp
,它会在resources
文件夹和tmp
里面的app
文件夹中查找。
../指向父目录,而./指向当前工作目录。
一个点基本上是指“走一个文件夹回path”
所以:'./'指向你所在的文件夹(在你的情况下文件夹是普通的)
'../'指向包含您所在文件夹的文件夹(在您的情况下是文件夹应用程序/)