JavaScript - чтение файла JSON с помощью require дает другой результат, чем fs.readFileSync - PullRequest
3 голосов
/ 19 июня 2019

У меня возникает проблема, из-за которой я думаю, что мне чего-то не хватает в том, как require работает в JavaScript. По сути, если я использую require для чтения файла JSON, я получаю другой результат, чем при использовании fs.readFileSync.

Я начинаю с файла JSON со следующим содержимым:

{"text":"old text"}

Сначала я читаю файл с require и fs.readFileSync и получаю одинаковые результаты для каждого. Затем я обновляю файл с помощью fs.writeFileSync и снова читаю файл с помощью require и fs.readFileSync, но после обновления получаю другие результаты.

Важно отметить, что мне нужен файл изнутри функции. Я ожидаю, что это будет импортировать файл отдельно с каждым вызовом функции, но это, очевидно, не то, что происходит. Просто интересно, может ли кто-нибудь объяснить, что именно происходит.

const fs = require('fs');
const textPath = './test.json';

const oldTextJSON = getText();  // prints as "old text"
const oldTextRead = JSON.parse(fs.readFileSync(textPath)).text;  // prints as "old text"

fs.writeFileSync(textPath, JSON.stringify({
  text: "new text"
}));

const newTextJson = getText();  // prints as "old text"
const newTextRead = JSON.parse(fs.readFileSync(textPath)).text;  // prints as "new text"

function getText() {
  return require(textPath).text;
}

1 Ответ

2 голосов
/ 19 июня 2019

Надеюсь, что эта строка объясняет характеристики require.

const path = require("path");


const filepath = path.resolve(textPath);
delete require.cache[filepath];

Обычно требуется чтение из кэша независимо от того, сколько раз вы звоните.

...