如何监控 ts-node 并在文件更改时重新加载:错误指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

如何让 ts-node 在文件更改时重新加载:解析真实陷阱



想象一下:您正在用 TypeScript 编写服务器,启动 ts-node,进行修改——但什么也没发生。您不得不手动停止进程,按 Ctrl+C,然后重新启动。熟悉吗?这个问题在 Stack Overflow 上获得了数千次浏览,这并非没有原因:配置 ts-node 的监控和重新加载 确实是一个难题。



在本文中,我不仅会给出现成的解决方案。我们将分析即使是经验丰富的开发人员也常犯的 主要错误,并且我将展示如何避免它们。您将了解为什么 ts-node --watch 无法“开箱即用”,ts-node-dev 相比传统方法有何优势,以及如何在此过程中不降低服务器性能。



为什么 ts-node 本身不会自动重新加载?



让我们立即澄清一点。ts-node 不是开发服务器。它是一个将 TypeScript 转译为 JavaScript 并在 Node.js 运行时中执行代码的转译器。它没有内置的文件更改监控机制(file watcher)。当您运行 ts-node app.ts 时,它只是执行文件然后退出。



要实现 文件更改时自动重新加载,您需要使用外部工具。而有趣的部分就在这里开始。



配置 ts-node 监控和重新加载时的五大错误



我收集了开发人员最常踩的陷阱。我们将逐一分析,并提供示例和解决方案。



错误 #1:在没有正确工具的情况下使用 --watch 标志



许多人在终端中输入:



ts-node --watch app.ts


然后惊讶地发现什么也没发生。原因是 ts-node 的标准版本中没有 --watch 标志。这个命令要么被忽略,要么会报错。



解决方案: 将 nodemon 与 ts-node 结合使用。以下是正确的命令:



npx nodemon --exec ts-node app.ts


或者,如果您想将其保存在 package.json 中:



{  "scripts": {    "dev": "nodemon --exec ts-node src/index.ts"  }}


这将使 nodemon 监控文件更改,并在每次保存时重新启动 ts-node。



错误 #2:nodemon 无法检测到 .ts 文件的更改



您配置了 nodemon,保存了文件,但它没有反应。为什么?默认情况下,nodemon 只监控 .js、.json 和一些其他扩展名。列表中不包含 .ts。



解决方案: 显式指定扩展名:



nodemon --watch src --ext ts --exec ts-node src/index.ts


--watch src 标志将监控范围限制在 src 文件夹(以避免监控 node_modules)。而 --ext ts 将 TypeScript 文件添加到受监控的扩展名列表中。



您也可以创建一个 nodemon.json:



{  "watch": ["src"],  "ext": "ts",  "exec": "ts-node src/index.ts"}


错误 #3:与 tsconfig.json 冲突——错误的模块解析



典型情况:您将 ts-node 与 nodemon 一起使用,但在启动时遇到类似 Cannot find module 或 Unknown file extension ".ts" 的错误。问题通常出在 tsconfig.json 的配置上。



有问题的 tsconfig.json 示例:



{  "compilerOptions": {    "module": "ESNext",    "moduleResolution": "bundler",    "target": "ES2020"  }}


问题:ts-node 在 Node.js 环境中运行,而 module: "ESNext" 配合 moduleResolution: "bundler" 是为像 Webpack 这样的打包工具设计的。

博客

书籍推荐