为什么我需要 *public-api.ts* 和 *exports*

Men*_*hem 8 angular-module angular angular-library

我是角度的新手,

开始编写我的第一个库,包含组件、服务、指令。

我在库的exports数组中列出了我的组件、服务、指令,但仍然:

  • 当使用来自另一个库或应用程序的库并成功编译时,我需要在public-api.ts. 为什么 ?ngModule 的 exports数组还不够吗?

  • 现在从exports数组中删除了组件、服务、指令,一切仍然有效。为什么 ?

阅读 angular.io 上的文档,它看起来public-api.tsexports服务于相同的目的 - 我可能在这里遗漏了一些基本的东西。

Jas*_*ite 9

exports一个的@NgModule定义,当该模块在被导入什么暴露于其它模块imports的另一模块的。在public-api充当清洁路径进口每桶文件。

例子:

// Instead of this
import { ExampleService } from '@lib/services/example.service';
import { AntoherService } from '@lib/sevivces/another.service';

// You can do this
import { ExmpaleService, AnotherService } from '@lib';
Run Code Online (Sandbox Code Playgroud)

https://angular.io/api/core/NgModule#exports https://basarat.gitbooks.io/typescript/docs/tips/barrel.html


小智 8

ngModule 中的导出充当导出的 Angular 部分,并且 public-api.ts 导出组件/管道/指令的打字稿符号。

第二次导出不是必需的,但建议保持导入路径干净。

使用 public-api.ts(推荐)

import {A, B, C} from 'my-library'
Run Code Online (Sandbox Code Playgroud)

没有公共 api.ts

import {A} from 'my-library/a'
import {B} from 'my-library/b'
import {C} from 'my-library/c'
Run Code Online (Sandbox Code Playgroud)

在 my-module.module.ts 中(运行良好,但不如 public-api.ts 智能)

import {A, B, C} from 'my-library/my-module'
Run Code Online (Sandbox Code Playgroud)