fs.readFileSync不是文件相对的? Node.js的

时间:2017-06-17 04:58:40

标签: node.js

- 假设我的项目根目录中有一个名为" 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中的路径?

2 个答案:

答案 0 :(得分:49)

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

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

答案 1 :(得分:0)

只是为了扩展上述内容,如果您将 fs.readFileSyncTypeScript(当然还有 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'));