Ошибка: связать EADDRINUSE, когда в узле нейтрино включена горячая замена модуля
Я использую предустановку нейтрино node.js с включенной горячей заменой модуля, вот что я имею в index.js
:
import fastify from 'fastify'
import router from './router'
const ft = fastify()
ft.register(router)
// enable hot module replacement
if (module.hot) {
module.hot.accept()
}
// listen
ft.listen(3000, 'localhost', (err) => {
if (err) throw err
console.log(`server listening on ${ft.server.address().port}`)
})
Когда я редактирую файл, я получаю это:
Мне интересно, можно ли использовать горячую замену модуля, как это? У кого-нибудь есть опыт?
Спасибо.
1 ответ
При использовании HMR с Node.js это немного сложнее, чем с веб-проектами, поскольку перезагрузка файла верхнего уровня может потребовать перезапуска процесса.
Если вы обратите внимание на документы Neutrino по HMR в Node.js, вы увидите, что HMR не выполняется на верхнем уровне. index.js
файл, а точнее на предметы, которые index.js
импорт.
Поэтому вы хотите принять конкретные вещи index.js
импортировать и использовать их изнутри, вместо того, чтобы пытаться перезагрузить index.js
который не будет работать без перезапуска процесса.
if (module.hot) {
module.hot.accept('./router');
// Optionally use a function to re-bind functionality
// after the accept:
// module.hot.accept('./router', () => /* ... */);
}