Angular TypeScript:重用前端(角度)和后端的接口和类
我有一个基于前端(Angular)和后端(用NestJS开发,所以是NodeJS)的monorepo用于当前项目。我想为前端和后端使用自定义接口和类。例如,创建DTO以便前端知道后端的参数 我考虑了一个公共文件夹,如下面的项目结构所示,但这不起作用,因为公共文件夹不在Angular(tsconfig)的范围内,因此自动完成不起作用Angular TypeScript:重用前端(角度)和后端的接口和类,angular,typescript,Angular,Typescript,我有一个基于前端(Angular)和后端(用NestJS开发,所以是NodeJS)的monorepo用于当前项目。我想为前端和后端使用自定义接口和类。例如,创建DTO以便前端知道后端的参数 我考虑了一个公共文件夹,如下面的项目结构所示,但这不起作用,因为公共文件夹不在Angular(tsconfig)的范围内,因此自动完成不起作用 project ├── client (Angular) ├── server (NestJS) └── common (client and server shar
project
├── client (Angular)
├── server (NestJS)
└── common (client and server share specific interfaces and classes)
有人有这方面的经验吗?目前,我将我的界面添加到两个文件夹中,但这很糟糕,因为如果我更新一个界面,我也必须替换另一个。类似的工具有助于这种设置,根据经验,这是在不创建任何私有npm repo(这是另一种选择)的情况下进行操作的最简单方法
基本上,您可以设置angular和服务器软件包来安装公共软件包,就像其他任何npm软件包一样,并运行lerna为每个软件包创建虚拟链接。
这样,当您需要intellisense时,编辑器将通过lerna在引导阶段创建的虚拟文件链接,从而允许您创建任意数量的通用软件包,而无需进行任何繁重的工作来连接所有消费者软件包。在tsconfig.json中将通用添加到
路径
属性:
"paths": {
"@angular/*": ["node_modules/@angular/*"],
"rxjs/*": ["node_modules/rxjs/*"],
"common/*": ["../common/*"]
}
然后:
从“公共文件夹中导出的接口”导入myInterface代码>
最好是有一个index.ts,它导出所有服务、接口或其他:
在TypeScript 3.0“项目参考”中引入了“/myFile”中的导出*。这可以帮助你实现你想要的(我用它在角度函数和云函数之间共享模型)
您需要做的是将外部项目引用添加到项目的tsconfig.json
,该项目应该重用其他地方的文件
{
"compilerOptions": {
// The usual config
},
"references": [
{ "path": "../my-other-project" }
]
}
尝试此资源:谢谢,但将其导出为tgz文件或上载到npm(公共或私有)以供外部使用并不好。可能还有另一个没有NPM的选项,引入了角度6 monorepo支持。您应该升级到ng6+并将接口移动到ng库。然后,您应该能够在这两个项目中使用它们。但是,不可能将它们放在文件夹结构的第一层,因为它必须位于angular范围内,才能使用angular cli。当然,你也可以把它们放在npm模块中。服务器不是角度项目,所以这不起作用。我几周前就试过了,但不起作用。我也没有找到任何显示工作示例的项目或Github存储库嗨,这个repo怎么样?似乎缺少一个有用的示例package.json,因此我无法验证它是否有效。在我的项目中,如果使用项目引用,则“自动完成”不起作用。这仅在本地起作用。如果您想在服务器上运行它,它将不起作用,因为别名没有解析(请参阅)Lerna是目前最简单的(对我来说是唯一的)工作解决方案