tsc重新编译时如何热重载表达?

问题描述

我有一个简单的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];
    });
  });
});

请记住,您可能会遇到issues

当前端和后端都在同一个仓库中时,我通常使用nodemonconcurrently满足我的热装需求。

通过并发和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",}