Suppose I have a file at the root of my project called file.xml
.
Suppose I have a test file in tests/ called "test.js" and it has
const file = fs.readFileSync("../file.xml");
If I now run node ./tests/test.js
from the root of my project it says ../file.xml
does not exist. If I run the same command from within the tests directory, then it works.
It seems fs.readFileSync
is relative to the directory where the script is invoked from, instead of where the script actually is. If I wrote fs.readFileSync("./file.xml")
in test.js
it would look more confusing and is not consistent with relative paths in a require
statement which are file relative.
Why is this? How can I avoid having to rewrite the paths in my fs.readFileSync
?
You can resolve the path relative the location of the source file - rather than the current directory - using path.resolve
:
const path = require("path");
const file = fs.readFileSync(path.resolve(__dirname, "../file.xml"));