使用 ivy 兼容库时是否仍需要运行 ngcc

问题描述

我经常读到 ngcc 需要将非 ivy 兼容库编译为 ivy 兼容库。 所以我用最新的材质库(版本 11)设置了一个新的 angular 项目(版本 11)。

由于材料库来自 angular 团队,我想该库已经与 ivy 兼容。为了确认我的假设,我检查了 package.json,它为我提供了以下模块的入口点:

  "main": "./bundles/material.umd.js","fesm2015": "./fesm2015/material.js","esm2015": "./esm2015/index.js","typings": "./index.d.ts","module": "./fesm2015/material.js","es2015": "./fesm2015/material.js"

所以在我看来,角度材料似乎已经被编译成所有这些模块格式。

但是在运行 npm start / run build ngcc 后,仍然将“es2015”编译为“esm2015”模块。

Compiling @angular/core : es2015 as esm2015
Compiling @angular/common : es2015 as esm2015
Compiling @angular/platform-browser : es2015 as esm2015
Compiling @angular/platform-browser-dynamic : es2015 as esm2015
Compiling @angular/cdk/keycodes : es2015 as esm2015
Compiling @angular/cdk/platform : es2015 as esm2015
...

这让我想到了以下问题:

  • 我是否混淆了“模块格式”和“常春藤兼容性”的概念/主题? (例如,angular/material 是否提供所有这些模块格式,但不是以常春藤兼容的方式?)
  • 当角材料已经包含 esm2015 模块时,为什么要将 es2015 编译为 esm2015?
  • 为什么 angular cli 将它们编译为 esm2015,因为它们首先已经存在?
  • 通常鼓励添加运行 ngcc 的安装后挂钩。但是,当所有图书馆都符合要求时,我为什么还需要它?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)