Можно ли очистить в node.js модуль, прежде чем Vite перезагрузит страницу при изменении файла?

#node.js #vite

Вопрос:

Я разрабатываю node.js приложение, использующее Sveltekit vite.

У меня есть файл, куда я прикрепляю слушателей событий.

Когда я изменяю конкретный файл, прикрепляется новый прослушиватель, но старый все еще активен.

Можно ли как-то подключиться к жизненному циклу перезагрузки страницы Vite?

В настоящее время я пытался прислушаться proceess.on('SIGINT|'SIGTERM'|'SIGHUP') , но это не помогло.

Ответ №1:

Для этого вы можете написать плагин для подключения handleHotUpdate .

Посмотрите на следующий небольшой пример плагина :

custom-hot.ts :

 /**
 * Custom Hot Reloading Plugin
 */

const data = 1337

export default function CustomHot() {
    return {
        name: 'custom-hot',
        enforce: 'post',
        handleHotUpdate({ file, server }) {

            console.log('> custom hot update', 'HotUpdate Hook')
            
            server.ws.send({
                type: 'custom',
                event: 'custom-hot',
                data: {"dummyData": data}
            })

            console.log('> Look at websockets messages for the event then look at your developer console to see the message from `hmr.ts`...', 'HotUpdate Hook')
        }
    

 

vite.config.ts :

 [...]

plugins: [
  customHot()
],

[...]
 

hmr.ts

 /**
 * Customized HMR module
 * eg: could be used to keep safe stores values with svelte/store
 */ 
 
if (import.meta amp;amp; import.meta.hot) {
  import.meta.hot.accept()
  import.meta.hot.on('custom-hot', (data) => {
      console.log('received event with data: ' , data)
  })  
} 
 

Теперь, чтобы увидеть результат, сохраните файл модуля hmr.ts , а затем :

  • a custom event с custom data выстреливается насквозь websockets :

введите описание изображения здесь

  • после получения вы можете просмотреть журнал сообщений в инструменте разработчика:

введите описание изображения здесь

Для получения дополнительной информации посетите официальный документ по адресу

Комментарии:

1. И тогда сервер будет тогда listen для этого с import.meta.hot ?

2. Я добавил customHot плагин, работает как заклинание. Я получаю вывод на консоль и использую server.ws.send() функцию. Но в моем клиентском коде я никогда не достигаю if (import.meta.hot)

3. Какова ваша версия vite/svelte и vite-plugin-svelte, если она существует в файле package.json ?

4. Vite-единственный (мы используем sveltekit), и версия vite 2.3.0

5. @DauleDK извините за задержку, я обновил ответ, чтобы вы могли получить полный рабочий пример.