Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度–;在项目之间共享公共代码的最佳实践_Angular_Angular Cli - Fatal编程技术网

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类,因此我需要在许多文件中更改该导入)。