在开发虚拟机中的 TypeScript 项目时,频繁保存代码后手动重启编译器是个麻烦事。比如你在 VMware 或 VirtualBox 里搭了个 Linux 虚拟机跑 Node.js 服务,每次改完 .ts 文件还得登录终端敲命令,效率很低。
使用 ts-node 和 nodemon 实现热重载
最简单的办法是结合 ts-node 和 nodemon。这两个工具搭配起来,能监听文件变化并自动重启服务。
先在项目中安装依赖:
npm install --save-dev ts-node typescript nodemon
然后在项目根目录创建一个 nodemon.json 配置文件:
{
"watch": ["src"],
"ext": "ts,js",
"ignore": ["src/**/*.spec.ts"],
"exec": "ts-node src/index.ts"
}
这样只要 src 目录下的任何 .ts 文件被保存,nodemon 就会触发重新执行 ts-node src/index.ts,实现即时反馈。
配合 VS Code 远程开发更顺手
如果你用的是 VS Code 的 Remote-SSH 插件连接虚拟机,保存本地代码的同时就会同步到远程,触发监听。这就跟在本机开发一样流畅,改完一行代码,几秒内就能看到服务输出的变化。
也可以把启动命令写进 package.json:
{
"scripts": {
"dev": "nodemon"
}
}
以后只需要运行 npm run dev,整个流程就全自动了。
注意文件系统事件穿透问题
有些虚拟机共享文件夹(如 VBox 共享目录或 VMware Tools 映射)可能不会正常触发 inotify 事件,导致 nodemon 监听不到变化。这时候可以启用轮询模式:
{
"watch": ["src"],
"ext": "ts,js",
"exec": "ts-node src/index.ts",
"delay": "2000"
}
或者在启动命令后加 --legacy-watch 参数:
nodemon --legacy-watch
虽然多花点 CPU,但能确保文件变更不被遗漏。
这套方案在 Ubuntu、CentOS 等常见 Linux 虚拟机环境中都验证过,适合中小型项目快速调试。