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