Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript fs.readDirSync在更改目录o.o时死亡_Javascript_Node.js_Commonjs - Fatal编程技术网

Javascript fs.readDirSync在更改目录o.o时死亡

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.js项目中,我发现了一些有趣的东西

测试1 以下是我的初始目录结构供参考:

start.js 使用
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");