如何使用nodejs和typescript自动重启节点应用程序?

How to automatic restart node application with nodejs and typescript?

我正在使用 nodejs、express、typescript 和 babel 建立一个新项目。所以我使用 babel 来更快地转换打字稿代码,并使用 etsc 进行类型检查

当我编写代码时,我希望应用程序自动应用更改,而无需我手动重新启动应用程序。我的解决方案是 运行 babel cli 用于带有 nodemon 的转译代码。 我的脚本是这样的

  "scripts": {
    "ts-check": "tsc --noemit",
    "build-ts": "etsc",
    "build": "rm -rf dist && yarn run build-ts",
    "dev": "nodemon --exec babel src --out-dir dist --extensions \".ts\"  --source-maps inline",
    "start": "node ./dist/src/index.js"
  },

但问题是即使我没有对代码进行任何更改,应用程序仍会重新启动。那我该如何解决呢?

是否有更好的自动应用更改的解决方案?

这是我得到的

第一个问题是 nodemon 运行 只有 babel 命令而不是你的 ./dist/src/index.js。第二个问题是 babel 正在 运行 将您的 .ts 文件转换为 .js 然后 nodemon 通知 .js 文件已更改并重新 运行s 您的命令 (babel) 再次将您的 .ts 文件转换为具有新时间戳的 .js 文件。我相信你已经明白了。 所以实际上你需要两个独立但依赖的东西:将你的 .ts 文件重新编译成 .js 文件,并且仅在 .js 文件更改时重新启动节点。 您可以通过类似的方式实现:

    "scripts": {
        ...
        "dev": "babel src --watch --out-dir dist --extensions .ts --source-maps inline & nodemon"
        ...

所以您同时启动 watch 模式下的 babelnodemon。当 .ts 文件发生变化时,babel 会将它们重新编译为 .js,当 .js 文件发生变化时,nodemon 将重新启动 node.

但是有一个小缺点。在第一个 运行 而没有 ./dist/src/index.js 文件时 nodemon 将抛出错误。不关键,nodemon会继续到运行。就在 babel 完成转译代码 nodemon 之后,将获取更改并继续没有问题。 尽管如果您不想在控制台中看到该错误,您可以在 nodemon 启动之前加入延迟。刚好够 babel 完成第一个 运行.

    "scripts": {
        ...
        "dev": "babel src --watch --out-dir dist --extensions .ts --source-maps inline & sleep 5 && nodemon"
        ...