我是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的含义?
答案 0 :(得分:1)
./my-file
表示查看根目录,而../my-file
表示来自当前目录,并查看父文件夹。
默认文档根目录是使用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 /)