【问题标题】:How to update schema on Apollo Server using Webpack's Hot Reload?如何使用 Webpack 的热重载更新 Apollo 服务器上的模式?
【发布时间】:2019-08-12 22:53:15
【问题描述】:

我看到了:

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

但没有任何更新。我已经尝试了一些我在网上找到的关于 webpack 的 output.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;
    });
}

谢谢!

【问题讨论】:

    标签: javascript node.js webpack apollo-server hot-reload


    【解决方案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();
      });
    }
    
    

    【讨论】:

      猜你喜欢
      • 2018-06-23
      • 2016-07-04
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 2018-08-13
      相关资源
      最近更新 更多