如何从库中导入组件(在 nrwl/nx 中使用 Angular)

Posted

技术标签:

【中文标题】如何从库中导入组件(在 nrwl/nx 中使用 Angular)【英文标题】:How to import a component from a library (in nrwl/nx with Angular) 【发布时间】:2019-11-10 08:47:20 【问题描述】:

我想将我的PageNotFoundComponent 从我的ui-components 库导入到我的应用程序的路由器中。

当我将 UiComponentsModule 导入到我的 AppModule 并使用模板中的组件时,一切正常,但以 es6 表示法导入组件失败。

/libs/ui-components/src/lib/ui-components.module.ts

import  CommonModule  from '@angular/common';
import  NgModule  from '@angular/core';
import  ContactCardComponent  from './contact-card/contact-card.component';
import  NotFoundComponent  from './not-found/not-found.component';
import  WhiteLabelFooterComponent  from './white-label-footer/white-label-footer.component';
import  WhiteLabelHeaderComponent  from './white-label-header/white-label-header.component';

@NgModule(
  declarations: [
    ContactCardComponent,
    WhiteLabelFooterComponent,
    WhiteLabelHeaderComponent,
    NotFoundComponent
  ],
  exports: [
    ContactCardComponent,
    WhiteLabelFooterComponent,
    WhiteLabelHeaderComponent,
    NotFoundComponent
  ],
  imports: [CommonModule],
)
export class UiComponentsModule 

/apps/myApp/src/app/app-routing.module.ts

import  NgModule  from '@angular/core';
import  RouterModule, Routes  from '@angular/router';
import  NotFoundComponent  from 'libs/ui-components/src/lib/not-found/not-found.component';

const routes: Routes = [
  
    path: '**',
    component: NotFoundComponent,
  ,
];

@NgModule(
  exports: [RouterModule],
  imports: [RouterModule.forRoot(routes)],
)
export class AppRoutingModule 

使用import NotFoundComponent from 'libs/ui-components/src/lib/not-found/not-found.component'; 之类的导入,我得到了 linter 错误:

库导入必须以 @frontend/ 开头 (nx-enforce-module-boundaries)tslint(1) 子模块导入路径来自 这个包是不允许的;而是从根目录导入 (no-submodule-imports)tslint(1) 模块 'libs' 未列为 package.json 中的依赖项 (no-implicit-dependencies)tslint(1)

当我将导入更改为 import NotFoundComponent from '@frontend/ui-components'; 时,我收到错误:

模块 '"../../../../../../../../../Users/LeitgebF/Projects/KLAITONWeb/frontend/libs/ui-components/src"' 没有导出成员'NotFoundComponent'.ts(2305)

那么如何在 Nx 中直接从库中导入组件呢?

【问题讨论】:

【参考方案1】:

我也必须将所需的组件添加到我的桶文件中。这是直接来自 github repo 支持的答案:https://github.com/nrwl/nx/issues/1533

我不明白,为什么我需要 Angular 模块,但我创建它并导出桶文件中的其他组件。

【讨论】:

你找到了为什么要导入 ngModules 的答案吗?我和你在 github 有同样的问题。

以上是关于如何从库中导入组件(在 nrwl/nx 中使用 Angular)的主要内容,如果未能解决你的问题,请参考以下文章

nrwl/nx 如何使用 npm 发布 NestJs 库?

如何将 NativeScript 集成到 @nrwl/nx

如何在 Nrwl Nx 中集成 firebase

当构建器使用不同的选项时,如何在 nrwl nx 中使用单个受影响的构建命令

从外部或从库中导入声音? AS3

如何强制 nrwl nx 尊重标签更新?