fs.readFileSync 不是文件相关的?节点.js

新手上路,请多包涵

假设我的项目根目录中有一个名为 file.xml 的文件。

假设我在 tests/ 中有一个名为“test.js”的测试文件,它有

const file = fs.readFileSync("../file.xml");

如果我现在从项目的根目录运行 node ./tests/test.js 它会说 ../file.xml 不存在。如果我从测试目录中运行相同的命令,那么它可以工作。

似乎 fs.readFileSync 与调用脚本的目录相关,而不是脚本实际所在的目录。如果我在 fs.readFileSync("./file.xml") test.js 它看起来会更加混乱,并且与 require 语句中的相对路径不一致,该语句是文件相关的。

为什么是这样?如何避免重写 fs.readFileSync 中的路径?

原文由 Arman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 382
1 个回答

您可以使用 path.resolve 解析相对于源文件位置的路径 - 而不是当前目录 -

 const path = require("path");
const file = fs.readFileSync(path.resolve(__dirname, "../file.xml"));

原文由 cartant 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题