- 假设我的项目根目录中有一个名为" file.xml"
的文件- 假设我在测试中有一个测试文件/调用" test.js"它有
const file = fs.readFileSync("../file.xml");
如果我现在从项目的根目录运行node ./tests/test.js
,它说../file.xml不存在。如果我从tests目录中运行相同的命令,那么它可以工作。
似乎fs.readFileSync是相对于调用脚本的目录,而不是脚本的实际位置。如果我在test.js中写了fs.readFileSync("./file.xml")
,它看起来会更加混乱,并且与require语句中相对路径的文件相对路径不一致。
这是为什么?
如何避免重写fs.readFileSync中的路径?
答案 0 :(得分:49)
您可以使用path.resolve
解析相对于源文件位置的路径 - 而不是当前目录:
const path = require("path");
const file = fs.readFileSync(path.resolve(__dirname, "../file.xml"));
答案 1 :(得分:0)
只是为了扩展上述内容,如果您将 fs.readFileSync 与 TypeScript(当然还有 CommonJS)一起使用,语法如下:
import fs from 'fs';
import path from 'path';
const logo = fs.readFileSync(path.resolve(__dirname, './assets/img/logo.svg'));
这是因为 fs.readFileSync()
是相对于当前工作目录解析的,有关详细信息,请参阅 Node.js File System 文档。
来源:Relative fs.readFileSync paths with Node.js
当然还有 CommonJS 格式:
const fs = require('fs');
const path = require('path');
const logo = fs.readFileSync(path.resolve(__dirname, './assets/img/logo.svg'));