Javascript fs.readDirSync在更改目录o.o时死亡
在node.js项目中,我发现了一些有趣的东西 测试1 以下是我的初始目录结构供参考: start.js 使用Javascript fs.readDirSync在更改目录o.o时死亡,javascript,node.js,commonjs,Javascript,Node.js,Commonjs,在node.js项目中,我发现了一些有趣的东西 测试1 以下是我的初始目录结构供参考: start.js 使用node start.js运行脚本 输出 测试2 我更改了目录结构并重试: 这次使用node./src/start.js运行脚本 输出 请有人解释一下为什么会发生这种情况以及为什么会发生这种情况: require("./test/test.js"); 以及我如何通过仅使用相对路径(没有其他模块或\uu dirname)来解决这个问题。 我对NodeJs比较陌生
node start.js
运行脚本
输出
测试2
我更改了目录结构并重试:
这次使用node./src/start.js
运行脚本
输出
请有人解释一下为什么会发生这种情况以及为什么会发生这种情况:
require("./test/test.js");
以及我如何通过仅使用相对路径(没有其他模块或\uu dirname
)来解决这个问题。
我对NodeJs比较陌生
- 操作系统:Windows
- 节点版本:14.15.3
fs的路径中的/
。readdirSync()
是相对于当前工作目录的,而不是相对于\u dirname
当您使用节点/src/start.js
启动应用程序时,您当前的工作目录是src
的父目录。因此,当您尝试fs.readdirSync(“./test”)
时,它不会看到哪里有test
子目录
我如何通过只使用相对路径(没有其他模块或_dirname)来解决这个问题。我对NodeJs比较陌生
好的,如果你想指定一个相对于当前模块位置的相对路径,那么你必须使用\uu dirname
来构建一个相对于该路径的路径,因为当前工作目录对于你的应用程序来说是全局的,这就是fs.readdirSync()
和除require()之外的几乎所有函数
用于解析相对路径,具体取决于应用程序启动时的系统工作目录
模块相对路径是使用\uu dirname
构建的。在nodejs中就是这样做的
require()
有自己的一组规则(您可以看到),这些规则与使用当前工作目录的fs.readdirSync()
或其他库函数没有任何关系
require()
的规则中有各种特定于模块加载的内容(例如默认在节点\u modules
子目录中查找)。啊,感谢您的澄清。我有一种感觉,它与操作系统级接口有关,但我对这一点也不熟悉,所以无法完全理解。@shammakh2-您真的应该使用\uu dirname
来构建一个与当前模块相关的路径。这是nodejs中CommonJS模块的最佳实践。哦,谢谢你通知我。我会的
const fs = require('fs');
console.log(fs.readdirSync("./test"));
['test.js']
├── src
├── test
└── test.js
├── start.js
├── package.json
Error: ENOENT: no such file or directory, scandir './test'.
require("./test/test.js");