tsconfig 路径和桶 files/same 目录导入的嵌套依赖项解析问题
Nest dependency resolution issue with tsconfig paths and barrel files/same directory imports
我在 tsconfig.json 中设置了一些不同的路径,以使控制器、实体、服务等的导入更容易处理。 tsconfig.json的相关部分:
...
"baseUrl": "./src",
"paths": {
"@hello/controllers": [
"./controllers"
],
"@hello/entities": [
"./entity"
],
"@hello/services": [
"./services"
]
},
...
我还在 src/controllers/、src/entity/ 和 src/services/ 目录中创建了桶文件 (index.ts),用于重新导出所有类 我需要从这些目录中获取。
从我的控制器目录中的文件导入服务时,一切都按预期工作。示例:
// src/controllers/comment.controller.ts
// This works
import { CommentService } from '@hello/services';
@Controller()
export class CommentController {...}
从 same 目录中的另一个服务文件导入服务时,不 工作。例子
// src/services/comment.service.ts
// This does NOT work
import { StoryService, UserService } from '@hello/services';
// StoryService, UserService, and CommentService are in the src/services directory
@Injectable()
export class CommentService {...}
我在执行上述操作时得到的错误是:
Error: Nest can't resolve dependencies of the CommentService (?, +). Please make sure that the argument at index [0] is available in the AppModule context.
预期行为
我希望使用 tsconfig.json 中定义的路径来解析依赖项,即使它们是从同一目录中导入的。
可能的解决方案
我目前的解决方法是使用相对路径导入文件:
// src/services/comment.service.ts
// This does work
import { StoryService } from './story.service';
import { UserService } from './user.service';
// I'd prefer to do this:
// import { StoryService, UserService } from '@hello/services';
@Injectable()
export class CommentService {...}
环境
@nestjs/common@5.7.4
@nestjs/core@5.7.4
打字稿@3.6.2
更新
我在src/services中的index.ts桶文件如下所示:
// src/services/index.ts
export * from './comment.service';
export * from './story.service';
export * from './user.service';
出口订单事宜
在我的 index.ts
桶文件中,我在用户和故事服务之前导出评论服务。但是,comment.service.ts class 导入 story.service.ts 和 user.service.ts。故事和用户必须导出 BEFORE 评论。
之前:
// src/services/index.ts
// This does NOT work
// and throws the "Nest can't resolve dependencies of the CommentService..." error
export * from './comment.service';
export * from './story.service';
export * from './user.service';
正确排序后:
// src/services/index.ts
// This works!
export * from './story.service';
export * from './user.service';
export * from './comment.service';
现在我可以在评论服务中使用我tsconfig.json中的导入路径了:
import { StoryService, UserService } from '@hello/services';
@Injectable()
export class CommentService {...}
感谢@ford04 提示 index.ts
中存在的问题。
我在 tsconfig.json 中设置了一些不同的路径,以使控制器、实体、服务等的导入更容易处理。 tsconfig.json的相关部分:
...
"baseUrl": "./src",
"paths": {
"@hello/controllers": [
"./controllers"
],
"@hello/entities": [
"./entity"
],
"@hello/services": [
"./services"
]
},
...
我还在 src/controllers/、src/entity/ 和 src/services/ 目录中创建了桶文件 (index.ts),用于重新导出所有类 我需要从这些目录中获取。
从我的控制器目录中的文件导入服务时,一切都按预期工作。示例:
// src/controllers/comment.controller.ts
// This works
import { CommentService } from '@hello/services';
@Controller()
export class CommentController {...}
从 same 目录中的另一个服务文件导入服务时,不 工作。例子
// src/services/comment.service.ts
// This does NOT work
import { StoryService, UserService } from '@hello/services';
// StoryService, UserService, and CommentService are in the src/services directory
@Injectable()
export class CommentService {...}
我在执行上述操作时得到的错误是:
Error: Nest can't resolve dependencies of the CommentService (?, +). Please make sure that the argument at index [0] is available in the AppModule context.
预期行为 我希望使用 tsconfig.json 中定义的路径来解析依赖项,即使它们是从同一目录中导入的。
可能的解决方案 我目前的解决方法是使用相对路径导入文件:
// src/services/comment.service.ts
// This does work
import { StoryService } from './story.service';
import { UserService } from './user.service';
// I'd prefer to do this:
// import { StoryService, UserService } from '@hello/services';
@Injectable()
export class CommentService {...}
环境 @nestjs/common@5.7.4 @nestjs/core@5.7.4 打字稿@3.6.2
更新 我在src/services中的index.ts桶文件如下所示:
// src/services/index.ts
export * from './comment.service';
export * from './story.service';
export * from './user.service';
出口订单事宜
在我的 index.ts
桶文件中,我在用户和故事服务之前导出评论服务。但是,comment.service.ts class 导入 story.service.ts 和 user.service.ts。故事和用户必须导出 BEFORE 评论。
之前:
// src/services/index.ts
// This does NOT work
// and throws the "Nest can't resolve dependencies of the CommentService..." error
export * from './comment.service';
export * from './story.service';
export * from './user.service';
正确排序后:
// src/services/index.ts
// This works!
export * from './story.service';
export * from './user.service';
export * from './comment.service';
现在我可以在评论服务中使用我tsconfig.json中的导入路径了:
import { StoryService, UserService } from '@hello/services';
@Injectable()
export class CommentService {...}
感谢@ford04 提示 index.ts
中存在的问题。