У нас есть этот фрагмент кода в нашем инструменте командной строки:
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.
Не знаю, влияет ли это на другие версии.
Это ожидаемое поведение, а НЕ ошибка, если файл json требовался хотя бы один раз до того, как файл был изменен в файловой системе, он будет использовать версию memcached в следующий раз. В вашем обходном пути вы просто обновляете кеш, другим решением было бы запросить файл напрямую с модулем fs
и проанализировать его или управлять им по своему усмотрению:
function getVersion() {
return JSON.parse(fs.readFileSync('/path/to/file.json', 'utf8')).version;
}
Самый полезный комментарий
Это ожидаемое поведение, а НЕ ошибка, если файл json требовался хотя бы один раз до того, как файл был изменен в файловой системе, он будет использовать версию memcached в следующий раз. В вашем обходном пути вы просто обновляете кеш, другим решением было бы запросить файл напрямую с модулем
fs
и проанализировать его или управлять им по своему усмотрению: