#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();
});
}