tsc 重新编译时如何热重载 express?

How do you hot-reload express when tsc recompiles?

我有一个简单的 nodeJS 服务器,我将其设置为使用 tsc --watch 监视代码的变化。我想知道的是如何设置 express 以在我更改代码时重新加载自身(注意我是在 Windows 上专门询问的)?

我假设它与 chokidar 有关,其中我有以下 index.ts 代码

import AWS from "aws-sdk";
import express from "express";
import chokidar from "chokidar";

console.log(AWS.S3);

const route = express.Router();

route.get("/signed-url-put-object", async (req, res) => {
  console.log(process.env)
});

if (process.env.NODE_ENV !== "production") {
  const watcher = chokidar.watch("./index.js");
  watcher.on("all", ()=> {
    console.log("reloading...");
    // what do I do here?
  })
  
}
express().listen(3000, ()=>console.log('listening'))

试试我从 this repo 中截取的这个片段。

watcher.on('ready', function() {
  watcher.on('all', function() {
    console.log("Clearing /server/ module cache from server");
    Object.keys(require.cache).forEach(function(id) {
      if (/[\/\]server[\/\]/.test(id)) delete require.cache[id];
    });
  });
});

请记住,您可能 运行 进入某些

当 front-end 和 back-end 在同一个 repo 中时,我通常使用 nodemon and concurrently 来满足我的热重载需求。

使用 concurrently 和 nodemon,我会有这样的东西。

"scripts": {
    "start": "concurrently \"yarn start:fe\" \"yarn start:watch\"",
    "start:watch": "nodemon --inspect=5858 ./server/server.ts",
    "start:be": "set TS_NODE_PROJECT=./tsconfig.server.json && node --inspect=5858 -r ts-node/register ./server/server.ts",
    "start:fe": "react-app-rewired start --scripts-version react-scripts",
}