fs.readDirSync 更改目录时死亡 o.O
fs.readDirSync dies when changing directory o.O
在 node.js 项目中,我发现了一些有趣的东西。
测试 1
这里是我的初始目录结构供参考:
├── test
└── test.js
├── start.js
├── package.json
start.js
const fs = require('fs');
console.log(fs.readdirSync("./test"));
使用 node start.js
到 运行 脚本。
输出
['test.js']
测试 2
我更改了我的目录结构并再次尝试:
├── src
├── test
└── test.js
├── start.js
├── package.json
这次使用了node ./src/start.js
到运行的脚本。
输出
Error: ENOENT: no such file or directory, scandir './test'.
请有人解释为什么会发生这种情况以及为什么会这样:
require("./test/test.js");
以及我如何通过仅使用相对路径(没有其他模块或 __dirname
)来解决这个问题。
我对 NodeJs 比较陌生。
- OS: Windows
- 节点版本:14.15.3
你传递给 fs.readdirSync()
的路径中的 ./
是相对于当前工作目录的,而不是相对于 __dirname
.
当您使用节点 ./src/start.js
启动您的应用程序时,您当前的工作目录是 src
的父目录。因此,当您随后尝试 fs.readdirSync("./test")
时,它并没有查找 test
子目录的位置。
how I can get around this by only using relative pathing (no other modules or __dirname). I am relatively new to NodeJs.
好吧,如果你想指定一个相对于当前模块位置的相对路径,那么你必须使用 __dirname
来构造一个相对于它的路径,因为当前工作目录对你来说是全局的app,fs.readdirSync()
和除 require()
之外的几乎所有函数都用于解析相对路径,并且取决于应用程序启动时的系统工作目录。
模块相对路径是使用 __dirname
构造的。这就是你在 nodejs 中的做法。
require()
有它自己的一套规则(你可以看到 here),这些规则与 fs.readdirSync()
或其他使用当前的库函数完全无关工作目录。
require()
的规则包含各种特定于模块加载的内容(例如默认在 node_modules
子目录中查找)。
在 node.js 项目中,我发现了一些有趣的东西。
测试 1
这里是我的初始目录结构供参考:
├── test
└── test.js
├── start.js
├── package.json
start.js
const fs = require('fs');
console.log(fs.readdirSync("./test"));
使用 node start.js
到 运行 脚本。
输出
['test.js']
测试 2
我更改了我的目录结构并再次尝试:
├── src
├── test
└── test.js
├── start.js
├── package.json
这次使用了node ./src/start.js
到运行的脚本。
输出
Error: ENOENT: no such file or directory, scandir './test'.
请有人解释为什么会发生这种情况以及为什么会这样:
require("./test/test.js");
以及我如何通过仅使用相对路径(没有其他模块或 __dirname
)来解决这个问题。
我对 NodeJs 比较陌生。
- OS: Windows
- 节点版本:14.15.3
你传递给 fs.readdirSync()
的路径中的 ./
是相对于当前工作目录的,而不是相对于 __dirname
.
当您使用节点 ./src/start.js
启动您的应用程序时,您当前的工作目录是 src
的父目录。因此,当您随后尝试 fs.readdirSync("./test")
时,它并没有查找 test
子目录的位置。
how I can get around this by only using relative pathing (no other modules or __dirname). I am relatively new to NodeJs.
好吧,如果你想指定一个相对于当前模块位置的相对路径,那么你必须使用 __dirname
来构造一个相对于它的路径,因为当前工作目录对你来说是全局的app,fs.readdirSync()
和除 require()
之外的几乎所有函数都用于解析相对路径,并且取决于应用程序启动时的系统工作目录。
模块相对路径是使用 __dirname
构造的。这就是你在 nodejs 中的做法。
require()
有它自己的一套规则(你可以看到 here),这些规则与 fs.readdirSync()
或其他使用当前的库函数完全无关工作目录。
require()
的规则包含各种特定于模块加载的内容(例如默认在 node_modules
子目录中查找)。