NgxSimpleCharts Angular库的多个入口点

128 阅读4分钟

DZone>Web Dev Zone>NgxSimpleCharts Angular库的多个入口点

NgxSimpleCharts Angular库的多个入口点

用 "ng generate library ngx-simple-charts "创建的Angular库是一段单一的代码。了解如何让Angular编译器将库的代码分割成模块。

Sven Loesekann user avatar通过

斯文-罗塞卡恩

-

1月10日,22 - Web Dev Zone -教程

喜欢 (2)

评论

保存

鸣叫

3.56K浏览次数

加入DZone社区,获得完整的会员体验。

免费加入

Angular库可以发展到很大的规模。用 "ng generate library ngx-simple-charts "创建的Angular库是一段单一的代码,它将被包含在第一个包含/使用它的模块中。那个模块很可能会影响到最初的有用的绘画。

为了解决这个问题,可以使用多个入口点。这些入口点提供的功能是在模块中只包括入口点的代码。懒加载模块可以包括其他入口点的代码。这使得将代码分散到使用它的模块中成为可能,并将模块的大小降低到必要的大小。

Ngx-Simple-Charts库是本文中使用的例子。使用它的项目是AngularPortfolioMgr。关于创建ngx-Simple-charts的第一次迭代的文章可以在这里找到。

具有多个入口点的简单图表

该库有一个新的结构。

ngx-simple-charts/projects/ngx-simple-charts
   /bar
   /line
   /src
  • 条形图 "目录是条形图功能的入口点。
  • line "目录是线图功能的入口点。
  • src "目录是通用功能的入口点,目前是一个占位符服务。

package.json看起来像这样。

JSON

{
  "name": "ngx-simple-charts",
  "version": "13.1.0",
  "license": "Apache License Version 2.0",
  "peerDependencies": {
    "@angular/common": "^13.0.0",
    "@angular/core": "^13.0.0",
    "rxjs": "^7.4.0"
  },
  "dependencies": {
    "d3-array": "^3.0.0",
    "d3-axis": "^3.0.0",
    "d3-brush": "^3.0.0",
    "d3-color": "^3.0.0",
    "d3-format": "^3.0.0",
    "d3-interpolate": "^3.0.0",
    "d3-scale": "^4.0.0",
    "d3-selection": "^3.0.0",
    "d3-shape": "^3.0.0",
    "d3-time-format": "^4.0.0",
    "d3-transition": "^3.0.0",
    "tslib": "^2.3.1"
  }
}

peerDependencies "定义了应用程序所需的库,包括库。

dependencies'定义了整个库使用的库。

在bar目录下是ng-package.json

JSON

{
  "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json",
  "lib": {
    "entryFile": "./public-api.ts"
  }
}

ng-package.json告诉编译器这是一个入口点,并注册了该入口点的公共api。

在bar目录中是public-api.ts

TypeScript

export * from './src/lib/sc-bar-chart/sc-bar-chart.component';
export * from './src/lib/ngx-bar-charts.module';
export * from './src/lib/sc-bar-chart/model/chart-bars';

这个文件声明了入口点的公共api。在这种情况下,组件、模块和数据的输入接口。Angular Cli的构建会在入口点的依赖关系中包含所需的部分库。

类似的文件可以在库的行目录中找到。

在AngularPortfolioMgr项目中使用该库

在这个package.json中是包含在项目中的Ngx-Simple-Charts库。

JSON

  "dependencies": {
    ...
    "@angular/router": "~13.0.0",
    "ngx-simple-charts": "^13.1.0",
    "material-design-icons": "3.0.1",
    ...
  },

这使得该库在项目中可用。

使用酒吧入口点

bar入口点在portfolios.module.ts中被导入。

TypeScript

import { NgxBarChartsModule } from 'ngx-simple-charts/bar';

@NgModule({
	declarations: [OverviewComponent, NewPortfolioComponent, 
                   AddSymbolComponent, PortfolioTableComponent, 
                   PortfolioChartsComponent, ProdConfigComponent, 
                   DevConfigComponent],
	imports: [
		...
		MatCheckboxModule,
		NgxBarChartsModule,
		PortfoliosRoutingModule
	],
	entryComponents: [NewPortfolioComponent],
	providers: [DevAppInfoService, ProdAppInfoService, 
                { provide: HTTP_INTERCEPTORS, 
                 useClass: TokenInterceptor, multi: true }],
})
export class PortfoliosModule { }

这个导入声明了'ngx-simple-charts/bar'入口点的'NgxBarChartsModule'。

在'@NgModule'中,'NgxBarChartsModule'被导入'PortfoliosModule'。

该库的''组件然后被用于模块的组合图表组件中。

使用线条入口点

线条入口点在portfolio-detail.module.ts中被导入。

TypeScript

import { NgxLineChartsModule } from 'ngx-simple-charts/line';

@NgModule({
	declarations: [PortfolioComponent, SymbolComponent],
	imports: [
                ...
		BaseModule,
		NgxLineChartsModule,
		MatCheckboxModule,
		...
	],
})
export class PortfolioDetailModule { }

该导入声明了'ngx-simple-charts/line'入口点的'NgxLineChartsModule'。

在'@NgModule'中,'NgxLineChartsModule'被导入'PortfolioDetailModule'。

该库的''组件然后被用于该模块的符号组件中。

看一下结果

AngularPortfolioMgr项目在package.json中有这些命令。

JSON

 "scripts": {
    ...
    "build-stats": "ng build --localize 
        --configuration production --stats-json",
    "analyse": "webpack-bundle-analyzer dist/manager/de/stats.json",
    ...
}

通过命令 "npm run build-stats "运行构建,创建一个 "stats.json "文件。

通过'npm run analyze'命令,'webpack-bundle-analyzer'被启动,并在浏览器中以可视化格式显示'stats.json'文件的内容。

结果看起来是这样的。

在 portfolios.模块中,可以看到条形图的'd3-scale'代码,在 portfolio-detail.模块中,显示了'ngx-simple-charts-line'代码。

总结

Angular能够创建具有多个入口点的库。这使得Angular可以在其模块中只放置所需入口点的代码。这可以将模块缩小到它们运行所需的最小尺寸,并且可以通过懒人加载模块提供快速的初始加载。创建一个具有多个入口点的Angular库,在Angular Cli中变得非常容易。

主题。

angular, 库, typescript, angular cli, webpack, angular模块

经Sven Loesekann授权发表于DZone。点击这里查看原文。

DZone贡献者所表达的观点属于他们自己。

DZone上的热门文章


评论

网络开发 合作伙伴资源