【问题标题】:How to automatic restart node application with nodejs and typescript?如何使用 nodejs 和 typescript 自动重启节点应用程序?
【发布时间】:2021-08-28 14:54:07
【问题描述】:

我正在使用 nodejs、express、typescript 和 babel 建立一个新项目。所以我使用 babel 来更快地转译 typescript 代码,使用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"
  },

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

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

这是我得到的

【问题讨论】:

    标签: node.js typescript babeljs nodemon


    【解决方案1】:

    第一个问题是nodemon 只运行babel 命令而不是你的./dist/src/index.js。第二个问题是正在运行的babel 将您的.ts 文件转换为.js,然后nodemon 通知.js 文件已更改并重新运行您的命令(babel),该命令再次将您的.ts 文件转换为@ 987654331@ 带有新时间戳的。我相信你已经明白了。 所以实际上你需要两个独立但依赖的东西:将你的 .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"
            ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 2017-05-01
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多