Angular 从角度库加载一个模块,而不是加载整个库

Angular 从角度库加载一个模块,而不是加载整个库,angular,angular-library,Angular,Angular Library,我有一个使用以下命令生成的角度库: ng generate library cac-models 在这个库中,我有两个名为Admin和Client Module的模块。当我想使用Admin Module时,我必须像下面的命令一样加载它,然后导入它: import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppRoutingMod

我有一个使用以下命令生成的角度库:

ng generate library cac-models
在这个库中,我有两个名为Admin和Client Module的模块。当我想使用Admin Module时,我必须像下面的命令一样加载它,然后导入它:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { AdminModule } from 'cac-models';  //=> this line

@NgModule({
  declarations: [AppComponent],
  imports:
    [
      BrowserModule,
      AdminModule,
      AppRoutingModule
    ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
通过这种方式,Angular将加载整个库(包括admin和client模块),因为我从cac模型导入AdminModule

我只想加载管理模块。如下图所示:

 import { AdminModule } from 'cac-models/lib/admin/admin.module'; // I get error
通过这种方式,我得到以下错误

未找到模块:错误:无法解析“cac模型/lib/admin/admin.Module”


是否可以这样做?

如果您专门导入AdminModule,则该模块将成为最终生成的一部分,所有死代码将被删除。这是树摇晃的一部分,你在这里读到了

根据你的问题,你在项目文件夹中有以下结构:

-projects
---------cac-models
-------------------src
----------------------lib
-------------------------Admin(module)
--------------------------------------admin-component-one
--------------------------------------admin-component-two
--------------------------------------admin-component-three
-------------------------Client(module)
---------------------------------------client-component-one
---------------------------------------client-component-two
---------------------------------------client-component-three
----------------------public-api.ts
管理员模块:

@NgModule({
  declarations:
    [
      AdminComponentOneComponent,
      AdminComponentTwoComponent,
      AdminComponentThreeComponent
    ],
  imports:
    [
      CommonModule
    ],
  exports:
    [
      AdminComponentOneComponent,
      AdminComponentTwoComponent,
      AdminComponentThreeComponent
    ]
})
export class AdminModule { }
客户端模块:

@NgModule({
  declarations:
    [
      ClientComponentOneComponent,
      ClientComponentTwoComponent,
      ClientComponentThreeComponent
    ],
  imports:
    [
      CommonModule
    ],
  exports:
    [
      ClientComponentOneComponent,
      ClientComponentTwoComponent,
      ClientComponentThreeComponent
    ]
})
export class ClientModule { }
您的
公共api
应该如下所示:

export * from './lib/admin/admin.module';
export * from './lib/client/client.module';
然后,使用以下命令构建
cac模型
库:

ng build cac-models
只要您只想使用
AdminModule
,就必须按如下方式导入它:

import { AdminModule } from 'cac-models';
也许你会问自己,这里Angular加载整个库,答案是:不,这里Angular只加载cac模型的AdminModule,而不是整个库

对于测试:

在AppModule中导入AdminModule,然后安装以查看结果
在这里,您将看到angualr只加载AdminModule(以及3个导出组件),而不是整个库

@Barkha-谢谢,您的解释太棒了。在开发模式下,角度加载自定义库中的所有内容,但在生产模式下,角度加载只加载所需的任何内容。