Ошибка: связать 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', () => /* ... */);
}
Другие вопросы по тегам