Node: Требуемый файл json не удаляется из кеша даже после переустановки

Созданный на 12 окт. 2015  ·  1Комментарий  ·  Источник: nodejs/node

У нас есть этот фрагмент кода в нашем инструменте командной строки:

  function getVersion() {
    return require('../../package.json').version;
  }

У клиента возникла проблема, когда он переустановил новую версию нашего программного обеспечения через npm, и когда он запустил ее, он увидел, что получает версию пакета из старой установки.
Я могу проверить из его журнала терминала, что был установлен более новый пакет.
Если это имеет значение, это глобально установленный инструмент.

Я могу найти обходной путь, вручную удалив его из кеша.

  function getVersion() {
    //fixing Node bug
    var name = require.resolve('../../package.json');
    delete require.cache[name];
    return require('../../package.json').version;
  }

Это ошибка или ожидаемое поведение?
Это было в Node v4.1.2.
Не знаю, влияет ли это на другие версии.

question

Самый полезный комментарий

Это ожидаемое поведение, а НЕ ошибка, если файл json требовался хотя бы один раз до того, как файл был изменен в файловой системе, он будет использовать версию memcached в следующий раз. В вашем обходном пути вы просто обновляете кеш, другим решением было бы запросить файл напрямую с модулем fs и проанализировать его или управлять им по своему усмотрению:

function getVersion() {
    return JSON.parse(fs.readFileSync('/path/to/file.json', 'utf8')).version;
}

>Все замечания

Это ожидаемое поведение, а НЕ ошибка, если файл json требовался хотя бы один раз до того, как файл был изменен в файловой системе, он будет использовать версию memcached в следующий раз. В вашем обходном пути вы просто обновляете кеш, другим решением было бы запросить файл напрямую с модулем fs и проанализировать его или управлять им по своему усмотрению:

function getVersion() {
    return JSON.parse(fs.readFileSync('/path/to/file.json', 'utf8')).version;
}
Была ли эта страница полезной?
0 / 5 - 0 рейтинги