如何使用 nodejs 和 typescript 自动重启节点应用程序?
Posted
技术标签:
【中文标题】如何使用 nodejs 和 typescript 自动重启节点应用程序?【英文标题】:How to automatic restart node application with nodejs and 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"
,
但问题是即使我没有对代码进行任何更改,应用程序也会不断重启。那我该如何解决呢?
是否有更好的解决方案自动应用更改?
这是我得到的
【问题讨论】:
【参考方案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
模式下同时启动babel
和nodemon
。当.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"
...
【讨论】:
以上是关于如何使用 nodejs 和 typescript 自动重启节点应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 NodeJS 13 和 Typescript 3.8 导入 esm 模块?
如何将 Typescript、NodeJS 和 Express 应用程序部署到 Heroku
如何将 webassembly 包含在 typescript 中(没有 nodejs)