nestjs / typeorm

TypeORM module for Nest framework (node.js) 🍇
https://nestjs.com
MIT License
1.91k stars 206 forks source link

HMR. Error on entity change. No repository was found. #41

Closed ph55 closed 6 years ago

ph55 commented 6 years ago

I've configured HMR and it works fine. With TypeORM there was some limitations that you have to import each entity manually without glob pattern. So I did and it works until some of entities changed/edited. Then error thrown.

If I change Config entity for example:

[Nest] 10524   - 2018-8-1 13:10:45   [ExceptionHandler] No repository for "Config" was found. Looks like this entity is not registered in current "default" connection?
RepositoryNotFoundError: No repository for "Config" was found. Looks like this entity is not registered in current "default" connection?
    at new RepositoryNotFoundError (C:\Users\alex\Documents\_dev\apps_node\node_modules\typeorm\error\RepositoryNotFoundError.js:20:28)
    at EntityManager.getRepository (C:\Users\alex\Documents\_dev\apps_node\node_modules\typeorm\entity-manager\EntityManager.js:580:19)
    at Connection.getRepository (C:\Users\alex\Documents\_dev\apps_node\node_modules\typeorm\connection\Connection.js:358:29)
    at getRepository (C:\Users\alex\Documents\_dev\apps_node\node_modules\@nestjs\typeorm\dist\typeorm.providers.js:13:26)
    at Object.useFactory [as metatype] (C:\Users\alex\Documents\_dev\apps_node\node_modules\@nestjs\typeorm\dist\typeorm.providers.js:22:20)
    at resolveConstructorParams (C:\Users\alex\Documents\_dev\apps_node\node_modules\@nestjs\core\injector\injector.js:67:55)
    at Injector.resolveConstructorParams (C:\Users\alex\Documents\_dev\apps_node\node_modules\@nestjs\core\injector\injector.js:86:30)
    at <anonymous>
 1: std::vector<v8::CpuProfileDeoptFrame,std::allocator<v8::CpuProfileDeoptFrame> >::vector<v8::CpuProfileDeoptFrame,std::allocator<v8::CpuProfileDeoptFrame> >
 2: v8::internal::CompilerDispatcherTracer::Estimate
 3: v8::internal::CompilerDispatcher::RemoveJob
 4: v8::internal::CompilerDispatcher::RemoveJob
 5: v8::internal::CompilerDispatcher::RemoveJob
 6: 0000037D4CA847A1

HMR output:

[HMR] Updated modules:
[HMR]  - ./src/@core/config/config.entity.ts
[HMR]  - ./src/@core/config/config.service.ts
[HMR]  - ./src/@core/config/config.module.ts
[HMR]  - ./src/app-one/db/entities.ts
[HMR]  - ./src/app-one/db/db.module.ts
[HMR]  - ./src/app-one/main.module.ts
[HMR]  - ./src sync recursive ^\.\/.*\/main\.module$
[HMR]  - ./src/app.module.ts
[HMR]  - ./src/main.ts
[HMR]  - ./src/app-one/common/common.module.ts
[HMR]  - ./src/@core/config/config.resolver.ts
[HMR] Update applied.

Any ideas why it's happening ?

kamilmysliwiec commented 6 years ago

The connection is shared across HMR reloads which means, that TypeORM is unable to reload your entities. In such a case, you have to perform a 'hard' recompilation (or set keepConnectionAlive to false).

stevefan1999-personal commented 6 years ago

I was also having the same issue. I changed my entities in HMR and boom, it just FUBAR with an exit code of 134:

[Nest] 13696   - 8/30/2018, 6:37:44 PM   [NestFactory] Starting Nest application... +6277ms
[HMR] Updated modules:
[HMR]  - ./packages/server/database/entity/User.ts
[HMR]  - ./packages/server/database/entity/index.ts
[HMR]  - ./packages/server/database/resolver/CommentResolver.ts
[HMR]  - ./packages/server/database/entity/Comment.ts
[HMR]  - ./packages/server/database/entity/Submission.ts
[HMR]  - ./packages/server/database/resolver/SubmissionResolver.ts
[HMR]  - ./packages/server/database/resolver/UserResolver.ts
[HMR]  - ./packages/server/database/authChecker.ts
[HMR]  - ./packages/server/database/module.ts
[HMR]  - ./packages/server/app/module.ts
[HMR]  - ./packages/server/main.ts
[HMR]  - ./packages/server/database/resolver/index.ts
[HMR]  - ./packages/server/database/createDB.ts
[HMR] Update applied.
[Nest] 13696   - 8/30/2018, 6:37:44 PM   [InstanceLoader] TypeOrmModule dependencies initialized +51ms
[Nest] 13696   - 8/30/2018, 6:37:44 PM   [InstanceLoader] TypeGQLModule dependencies initialized +2ms
[Nest] 13696   - 8/30/2018, 6:37:44 PM   [InstanceLoader] AppModule dependencies initialized +11ms
[Nest] 13696   - 8/30/2018, 6:37:44 PM   [InstanceLoader] GraphQLModule dependencies initialized +1ms
[Nest] 13696   - 8/30/2018, 6:37:44 PM   [InstanceLoader] TypeOrmCoreModule dependencies initialized +1ms[Nest] 13696   - 8/30/2018, 6:37:45 PM   [ExceptionHandler] No repository for "Comment" was found. Looks
like this entity is not registered in current "default" connection? +73ms
RepositoryNotFoundError: No repository for "Comment" was found. Looks like this entity is not registered
in current "default" connection?
    at new RepositoryNotFoundError (E:\typescript-starter\src\error\RepositoryNotFoundError.ts:10:9)
    at EntityManager.getRepository (E:\typescript-starter\src\entity-manager\EntityManager.ts:702:19)
    at Connection.getRepository (E:\typescript-starter\src\connection\Connection.ts:322:29)
    at getRepository (E:\typescript-starter\node_modules\@nestjs\typeorm\dist\typeorm.providers.js:13:26)    at Object.useFactory [as metatype] (E:\typescript-starter\node_modules\@nestjs\typeorm\dist\typeorm.providers.js:22:20)
    at resolveConstructorParams (E:\typescript-starter\node_modules\@nestjs\core\injector\injector.js:68:55)
    at Injector.resolveConstructorParams (E:\typescript-starter\node_modules\@nestjs\core\injector\injector.js:99:30)
 1: 00007FF70C153D05
 2: 00007FF70C12DD46
 3: 00007FF70C0B7CC9
 4: 00007FF70C512AA2
 5: 00007FF70C513FCD
 6: 00007FF70C513029
 7: 00007FF70C512F0B
 8: 000003C32C2DC6C1

Was this problem related to the global meta data storage?