You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS start:dev模式未自动重载代码修改,需手动重启问题

NestJS start:dev 不自动重载代码修改的排查与解决

问题背景

使用NestJS 9.x + TypeORM 0.3.x开发时,npm run start:dev(带--watch参数)无法检测到代码修改(例如调整Repository查询逻辑、添加异常处理),必须手动重启服务才能让修改生效,删除dist文件夹也无法解决。环境为Ubuntu 20.04,通过Docker连接MySQL。

可能的原因与解决办法

1. Ubuntu系统inotify监听上限不足

Linux系统默认的inotify文件监听数量有限,当项目文件较多时,NestJS的watch模式无法覆盖所有文件变化。

解决步骤:

  • 临时调整监听上限(重启后失效):
    echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
    
  • 永久生效:编辑/etc/sysctl.conf,添加或修改以下内容,然后执行sudo sysctl -p:
    fs.inotify.max_user_watches=524288
    

2. NestJS CLI监听配置异常

检查nest-cli.json中的watch配置,确保包含了需要监听的文件目录,且开启了资源监听。

正确配置示例:

{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "deleteOutDir": true,
    "watchAssets": true
  },
  "watchOptions": {
    "include": ["src/**/*"],
    "exclude": ["node_modules", "dist"]
  }
}
  • 确保watchAssets设为true,避免静态资源或配置文件修改不被监听;
  • watchOptions.include明确指定监听src下所有文件。

3. TypeORM实体元数据缓存

TypeORM 0.3.x在开发模式下可能缓存实体元数据,导致代码修改后元数据未更新,逻辑仍沿用旧版本。

解决步骤:
在TypeORM配置中禁用缓存,并开启自动同步(仅开发环境):

// app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'your-db-host',
      port: 3306,
      username: 'your-username',
      password: 'your-password',
      database: 'your-db',
      autoLoadEntities: true,
      synchronize: true, // 仅开发环境使用,生产环境禁用
      cache: false, // 禁用实体元数据缓存
    }),
  ],
})
export class AppModule {}

4. 依赖版本冲突或安装异常

检查@nestjs/cli与@nestjs/core版本是否匹配,或依赖安装存在损坏。

解决步骤:

  • 更新@nestjs/cli到与@nestjs/core一致的版本(当前core为9.3.9):
    npm install @nestjs/cli@9.3.9 --save-dev
    
  • 清除旧依赖重新安装:
    rm -rf node_modules package-lock.json
    npm install
    

5. Docker挂载目录的文件事件传递问题

如果代码目录是通过Docker挂载到容器内运行开发服务,可能存在文件系统事件无法传递到容器的情况,导致watch模式失效。

解决步骤:

  • 优先在宿主机上运行npm run start:dev,而非Docker容器内;
  • 若必须在容器内运行,需确保挂载目录时启用了文件监听支持(例如Docker Desktop的文件共享设置,或使用--mount参数时添加相关配置)。

环境信息

  • NestJS版本:9.3.9
  • TypeORM版本:0.3.12
  • Node版本:18.11.18
  • 系统:Ubuntu 20.04
  • 数据库:MySQL(Docker连接)

内容的提问来源于stack exchange,提问作者r00k13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:07:24