Angular 角度–;在项目之间共享公共代码的最佳实践
如何在项目之间共享代码 我使用以下方法创建了两个应用程序:Angular 角度–;在项目之间共享公共代码的最佳实践,angular,angular-cli,Angular,Angular Cli,如何在项目之间共享代码 我使用以下方法创建了两个应用程序: ng生成应用程序app1 ng生成应用程序app2 我希望projects/app1/src/app.module.ts从projects/app2/src/shared/common.module.ts 不创建第三个名为common或其他项目的最佳实践是什么?创建一个projects/common文件夹,或者在这里创建一个名为common的文件夹,并在此处输入TypeScript文件 使用库项目 ng generate library
ng生成应用程序app1
ng生成应用程序app2
我希望projects/app1/src/app.module.ts
从projects/app2/src/shared/common.module.ts
不创建第三个名为common或其他项目的最佳实践是什么?创建一个projects/common文件夹,或者在这里创建一个名为common
的文件夹,并在此处输入TypeScript文件 使用库项目
ng generate library common
这将自动将路径别名添加到主tsconfig.json
"common": [
"dist/prod/common"
],
"common/*": [
"dist/prod/common/*"
]
这将允许您参考common
库项目中定义的模块和导出的组件、服务和管道
例如,在任何app.module.ts
中:
import { SharedModule } from 'common';
@NgModule({
imports: [
SharedModule,
...
],
declarations: [...],
exports: [...]
bootstrap: [AppComponent]
})
export class AppModule { }
在消费应用程序(例如,用于开发)的
ng-serve
期间支持热重新加载的另一种方法是从项目级的公共public\u api导入,如下所示:
import { SharedModule } from 'projects/common/src/public_api';
@NgModule({
imports: [
SharedModule,
...
],
...
})
export class AppModule { }
试一试,我用得很多,效果很好!我强烈建议您阅读本文件:
如果大多数应用程序共享相同的代码,我将建议使用动态路由和延迟加载模块的另一种方法。
在相同的代码库中,您可以将所有特定于应用程序的代码添加到新模块中。
然后在环境文件中添加一个附加标志,并创建一个新的环境文件,这样应用程序就可以通过Interment配置--c构建到不同的包中。
有关更多详细信息,请查看此唯一需要注意的是,在使用之前,您需要大量构建库。我将重新表述我的问题。@bhantol-这是一个观点问题。如果“使用前”是指在ng serve
期间,您始终可以从public\u api
ES模块导入。我已经更新了我的答案。但是,当你说这是一个警告时,要三思而后行,因为在运行时,在生产中,你的每一个应用程序无论如何都会有自己独立的构建包。你真的需要一个库来共享和分发这个公共代码。我知道库,并且已经将一堆项目转换为库+演示格式,这对于库项目来说是有意义的,但是对于共享代码、多边形填充、样式来说,这太过分了。我无法从你的答案中分析哪种方法最好以及为什么。关于“如何”比“为什么”有太多的噪音。我试过了,它与ngbuild的一些额外工作一起工作。我认为在开发过程中进行ng服务和零星构建是可以的,直到碎片组件完成。当它们可能再也不会被触碰时,你可以把它们做成一个真正的图书馆。这样,您就不需要重新构建库—每个组件的更改—您认为使用typescript导入别名轻松地从“projects/common/src/public_api”切换到“common”有用吗?(在我的例子中,我不导出单个angular模块,而是从public_api导出许多typescript类,因此我需要在许多文件中更改该导入)。