【问题标题】:Npm Library with dependencies varying from one project to anotherNpm 库的依赖项因项目而异
【发布时间】:2021-08-16 20:41:11
【问题描述】:

我使用带有 npm 依赖项的 typescript 工作

理论:

假设是一个库 A 还有两个项目BC

我的库 A 使用 B 中需要的依赖项,但 C

中没有

如何在 B 项目中安装此依赖项而不在 C 中安装此依赖项而不会出现编译错误?

project B
 |----library A
 |----library D

project C
 |----library A

library A
 |----library D

实用:

由于我可能走错了路,这里是具体案例! 我在一个具有 Angular 前端NestJs 后端 的项目中。 我创建了一个包含 DTO 的通用库。我想使用来自@nestjs/swagger@ApiProperty() 注释。但我不想在我的 Angular 前端上安装所有 @nestjs/swagger 依赖项。

在这种情况下,我看到 Swagger 插件可以帮助我: https://docs.nestjs.com/openapi/cli-plugin
但是经过测试,它对 node_modules 文件不起作用

api
 |----dto library
 |----@nestjs/swagger

front
 |----dto library

dto library
 |----@nestjs/swagger (for annotation)

【问题讨论】:

  • 没有人找到解决方案或线索?

标签: angular typescript npm dependencies nestjs


【解决方案1】:

如果没有一些自定义构建脚本来读取 dto 库中的文件,删除所有 @nestjs/swagger 导入和装饰器,并将接口写入另一个库文件夹,您可以从中导入它们,就无法使其正常工作你的front 应用程序。或者以某种方式在 front 应用程序中模拟 Swagger,以便装饰器成为无操作函数,而不是从实际的 Swagger 库中导入。

更简单的方法:

让你的dto 库只有纯接口。不要在那里导入 Swagger 或任何东西。只需导出接口即可。

然后你可以在你的frontapp 中导入接口,然后在你的api 应用程序中将接口实现到类中并添加所有swagger 装饰器。为什么不把class-validator 也扔进去,Nest 的 ValidationPipe 很棒。

【讨论】:

  • 旁注,很久以前我尝试过Or somehow mock Swagger...,使用 tsconfig.json 路径从我自己的位置而不是 node_modules 导入 Typeorm、Swagger 等服务器库,但从来没有真正起作用。从那以后我使用了几次提到的第一种方法,但现在我通常只使用简单的方法,因为即使有一些重复,它也不是那么糟糕。如果有人成功完成此操作,请告诉我 =)
  • 嗯,好吧,所以我碰到了一个难点......是的,简单的方法还不错,但是因为我想创建多个微服务,这些微服务可以使用这个库和这个 swagger 工具。我会再挖掘一点来阅读库中的文件,如果我发现我肯定会发布它!但我开始失去希望^^坦克的答案
  • 一个共享库用于接口,另一个共享库用于服务器应用程序的实现类。
  • 是的,我也想过这个解决方案,但是如果你修改一个dto,你必须修改两个库......
猜你喜欢
  • 2020-05-06
  • 2016-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 2015-01-09
相关资源
最近更新 更多