Angular material 什么';在角材料/角柔性布局中使用public-api.ts的原因是什么?

Angular material 什么';在角材料/角柔性布局中使用public-api.ts的原因是什么?,angular-material,angular-flex-layout,Angular Material,Angular Flex Layout,我从angular material和angular flex layout中了解到,当他们导出组件时,他们首先导出public-api.ts中的相关子组件,然后只导出index.ts中public-api.ts中的所有内容(例如导出*自'./public api')。以下是其徽章组件的示例: //公共api.ts 从“./badge module”导出*; 从“./badge”导出*; //索引 从“/public api”导出*; 我的问题是,为什么不将所有导出内容都放在index.

我从angular material和angular flex layout中了解到,当他们导出组件时,他们首先导出public-api.ts中的相关子组件,然后只导出index.ts中public-api.ts中的所有内容(例如导出*自'./public api')。以下是其徽章组件的示例:

//公共api.ts

从“./badge module”导出*;
从“./badge”导出*;

//索引

从“/public api”导出*;


我的问题是,为什么不将所有导出内容都放在index.ts中,而是将border放在index.ts中,以创建更多的公共api.ts?

以保持代码更干净

因为“索引”并不意味着什么。但“公共api”明确了存在的内容,即公共实体

public_api.ts旨在枚举和公开特定功能以供外部使用。 index.ts是一种默认的导出机制,用于拒绝完整路径导入


乍一看,我认为有几个原因:

  • 消除歧义:鉴于缺少“内部”修饰符以及内部模块增加的复杂性,需要多个index.ts桶文件来提供不同的内部/外部API表面
  • 面向用户的工具:为了提供低工作量的工具默认设置,需要一个公共API文件标准。NG编译器所做的不仅仅是将所有类型脚本构建为JavaScript;值得注意的是,它也会根据选择的入口点进行树震动。出于其他原因,index.ts对于默认值来说是一个糟糕的选择。看
  • Angular内部代码质量:公共api是与Angular消费者签订的合同,必须严格控制,随着文档更改、新测试、兼容性评估和公告而进行更改。为此,项目设置会自动拒绝导致公共api更改的代码更改。看
  • 意识/清晰性/意图:我认为其他评论通常都暗示了这一点。历史上,无论是内部还是外部,人们都在使用index.ts。当然,项目只能对公共API签名使用index.ts,但这并不明显

  • 非常感谢,亚历克斯。但我还是不明白。将index.ts中的所有内容打包似乎也不赞成完整路径导入,并将特定功能公开给外部使用。你能提供一些具体的例子来说明这种差异吗?我同意你的观点,但罗伯特·塞西尔·马丁(Robert Cecil Martin)的《干净的代码书》最近说服了我,让我这样写:成年=18;isOfAge=检查年龄(年龄);如果(isOfAge){allow();}函数checkOfIsOfAge(age){return age>addutulthood;}而不是:
    如果(i>18){allow();}
    对我来说,那么“index”并没有多大意义,它只是用来反对完整路径。但公共api明确了其中的内容。