Express 快速路线HMR与网页包
我正试图让HMR在服务器端使用express应用程序,我看到了一些奇怪的行为。我的简单测试项目 索引Express 快速路线HMR与网页包,express,typescript,webpack,webpack-hmr,Express,Typescript,Webpack,Webpack Hmr,我正试图让HMR在服务器端使用express应用程序,我看到了一些奇怪的行为。我的简单测试项目 索引 let httpListener: Server = null; let AppServer = require('./AppServer').default; const port = Config.serverPort; if (process.env.NODE_ENV === 'dev') { if ((module as any).hot) { (module
let httpListener: Server = null;
let AppServer = require('./AppServer').default;
const port = Config.serverPort;
if (process.env.NODE_ENV === 'dev') {
if ((module as any).hot) {
(module as any).hot.addDisposeHandler((data: any) => {
httpListener.close();
AppServer = require('./AppServer').default;
});
console.log('index.ts', (module as any).hot.dependencies);
(module as any).hot.accept((err: any) => {
console.log('HMR Error', err);
});
}
}
httpListener = AppServer.app.listen(port, (error: Error) => {
if (error) {
console.error(error);
} else {
console.info(`Listening on port ${port}.`);
}
});
AppServer.ts
class AppServer {
public app: express.Application = express();
constructor() {
this.app.use('/api', (new ApiRouter()).router);
}
}
export default new AppServer();
和ApiRouter.ts
export class ApiRouter {
public router: express.Router = express.Router();
constructor() {
this.router.use('/auth', (new AuthRouter()).router);
this.router.get('/', (req, res) => {
res.json({success: true});
});
}
}
Webpack绑定正确,HMR报告模块正在更新。如果我更改index.ts中的某些代码,这些更改将生效。然而,当我将{success:true}
翻转到{success:false}
时,我看到HMR更新
[HMR] Updated modules:
[HMR] - ./src/server/AppServer.ts
[HMR] - ./src/server/index.ts
[HMR] - ./src/server/api/ApiRouter.ts
但是当我到达终点时,我返回{success:true}
。因此,尽管HMR似乎做了正确的事情,但代码在运行时没有被更改。我怀疑我遗漏了module.hot.accept如何在这里工作的一些基本信息,但我无法找出哪里出了问题
有人能让它正常工作吗 您是否将
'webpack-hot-middleware/client'
作为网页条目的第一件事?它是服务器端的,所以我做了webpack/hot/poll?1000
但是是的,它在那里