Как обновить схему на сервере Apollo с помощью горячей перезагрузки Webpack?

#javascript #node.js #webpack #apollo-server #hot-reload

#javascript #node.js #webpack #apollo-сервер #горячая перезагрузка

Вопрос:

Я вижу это:

 [HMR] Updated modules:
[HMR]  - ./src/resolvers.js
[HMR] Update applied.
  

Но ничего не обновляется. Я попробовал некоторые другие решения, которые я нашел в Интернете, касающиеся вывода webpack.publicPath. Я понятия не имею, что еще делать, и скоро я перейду к производству. Перезапуск сервера для меня не вариант.

Мой код:

 import express from 'express'
import { execute, subscribe } from 'graphql';
import { ApolloServer } from 'apollo-server-express'

import schema from './schema';


import typeDefs from './typeDefs'
import resolvers from './resolvers'

import getUserByToken from './getUserByToken';


const app = express();

const path = '/graphql';

const server = new ApolloServer({ typeDefs, resolvers, });

server.applyMiddleware({ app });

server.listen(8081, () => {
  console.log(`🚀 Server ready at http://localhost:${PORT}${server.graphqlPath}`)
  console.log(`🚀 Subscriptions ready at ws://localhost:${PORT}${server.subscriptionsPath}`)
})



let currentApp = app

if (module.hot) {
    module.hot.accept(['./index', './resolvers'], () => {
        server.removeListener('request', currentApp);
        server.on('request', app);
        currentApp = app;
    });
}
  

Спасибо!

Ответ №1:

Вы можете решить эту проблему, передав promise в hot.module.data , а затем просто дождаться его при новой перезагрузке.

 import { server } from "./server";

async function startServer() {
  if (module.hot?.data?.oldServer) await module.hot.data.oldServer;
  const { url } = await server.listen();
  console.log(`Server ready at ${url}. `);
}

startServer();

if (module.hot) {
  module.hot.accept();
  module.hot.dispose((data) => {
    data.oldServer = server.stop();
  });
}