fs.writeFileSync 路径没有意义 Node.js

fs.writeFileSync path doesn't make sense Node.js

我正在尝试写入一个文件,但是路径没有意义。弄乱之后我发现这就是让它工作的原因:

async execute(interaction) {
    interaction.guild.members.fetch()
    .then( members => {
      members = members.reduce((col, member) => col.set(`${member.user.username}#${member.user.discriminator}`, member.user.id), new Collection());
      members.forEach( id => {
        const data = require('../leaderboard.json');
        data[id] = 0;
        fs.writeFileSync('./leaderboard.json', JSON.stringify(data));
      })
    })

重置命令应该将不一致用户 ID 列表添加到 leaderboard.json。在 运行 命令之前,leaderboard.json 只是一组空括号,在它之后包含不和谐用户 ID 的列表。 我附上了我的文件布局的照片,但没有意义的是第二个 fs.writeFileSync 在路径为 './leaderboard.json' 时如何工作,而它应该是 ../leaderboard.json

在 Node require 中解析相对于源文件的路径,而 fs.* 方法将解析它相对于工作目录(进程启动的目录)。 require 不打算用于加载任意数据,而是使用 fs.readFile(Sync)JSON.parse 文件。使用 readFile 也意味着路径解析与 writeFile.

相同

require 不应该用于任意数据的原因是它通常会缓存文件并且对文件的更改不会反映在以后的调用中。

如果您的文件应该相对于源进行解析,您可以使用 path.join(__dirname, relativePath)

__dirname为源文件所在目录路径