如何使用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
模式下的 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、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
模式下的 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"
...