【问题标题】:Angular 9 Library Build Error: Failed to find exported name of nodeAngular 9 库构建错误:找不到节点的导出名称
【发布时间】:2020-05-07 14:37:51
【问题描述】:

在我的 Angular 9(一切都是最新的)中,我使用了几个自己的库。这些库使用“paths”属性包含在 tsconfig.json 中,然后在应用程序中使用。

我创建了一个新库,它使用了 Angular Cdk 库中的大量 CdkPortal,在编译导入库的根应用程序时收到以下错误消息。在此之前我编译了库本身并且没有构建错误:

    Compiling cap-gui-components : module as esm5
Error: Error on worker #1: Error: Failed to find exported name of node (CapGuiSettingsDialogContainerComponent 

使用 Cdk 动态加载的所有组件都会生成此错误消息。理论上,这些组件不需要在 index.ts 文件中导出,因为它们只在库本身中使用。如果我导出它们,我不会收到错误消息。

完整的错误信息:

ompiling cap-gui-components : module as esm5
Error: Error on worker #1: Error: Failed to find exported name of node (CapGuiSettingsDialogContainerComponent = /** @class */ (function () {
    // ************************************************************************************************
    /** Constructor */
    ...code...

in 'C:/Users/Arbeit/dev/CaptureWebApplications/dist/cap-gui-components/fesm5/cap-gui-components.js'.
    at Object.findExportedNameOfNode (C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\@angular\compiler-cli\src\ngtsc\imports\src\find_export.js:35:19)
    at LogicalProjectStrategy.emit (C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\@angular\compiler-cli\src\ngtsc\imports\src\emitter.js:228:38)
    at ReferenceEmitter.emit (C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\@angular\compiler-cli\src\ngtsc\imports\src\emitter.js:71:44)
    at Object.toR3Reference (C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\@angular\compiler-cli\src\ngtsc\annotations\src\util.js:192:31)
    at NgModuleDecoratorHandler._toR3Reference (C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\@angular\compiler-cli\src\ngtsc\annotations\src\ng_module.js:417:31)
    at C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\@angular\compiler-cli\src\ngtsc\annotations\src\ng_module.js:196:83
    at Array.map (<anonymous>)
    at NgModuleDecoratorHandler.analyze (C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\@angular\compiler-cli\src\ngtsc\annotations\src\ng_module.js:196:48)
    at NgccTraitCompiler.TraitCompiler.analyzeTrait (C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\@angular\compiler-cli\src\ngtsc\transform\src\compilation.js:345:40)
    at analyze (C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\@angular\compiler-cli\src\ngtsc\transform\src\compilation.js:297:58)
    at ClusterMaster.onWorkerMessage (C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\@angular\compiler-cli\ngcc\src\execution\cluster\master.js:168:27)
    at C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\@angular\compiler-cli\ngcc\src\execution\cluster\master.js:52:95
    at ClusterMaster.<anonymous> (C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\@angular\compiler-cli\ngcc\src\execution\cluster\master.js:248:57)
    at step (C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\tslib\tslib.js:139:27)
    at Object.next (C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\tslib\tslib.js:120:57)
    at C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\tslib\tslib.js:113:75
    at new Promise (<anonymous>)
    at Object.__awaiter (C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\tslib\tslib.js:109:16)
    at EventEmitter.<anonymous> (C:\Users\Arbeit\dev\CaptureWebApplications\node_modules\@angular\compiler-cli\ngcc\src\execution\cluster\master.js:242:32)
    at EventEmitter.emit (events.js:311:20)
An unhandled exception occurred: NGCC failed.
See "C:\Users\Arbeit\AppData\Local\Temp\ng-dpI2TJ\angular-errors.log" for further details.

为什么我需要导出这些组件?是否有其他方法可以构建该库而不会出错且不导出这些组件?

【问题讨论】:

    标签: angular tsconfig angular-cdk angular-library


    【解决方案1】:

    不到一个小时后,我就找到了解决方案。 我需要在 tsconfig.lib.prod.ts 中启用 ivy。现在这个库可以用 Ivy 编译了,虽然不推荐,但一切正常。

    【讨论】:

      【解决方案2】:

      作为记录,我在一个库(我们自己制作)上遇到了这个神秘的错误,在一个类上,它编译得很好,并且库的演示/测试工作正常。
      错误出现在我使用这个库更新应用程序的依赖项之后,在npm i之后的ngcc编译阶段。

      我终于明白这是因为我提供了在同一个库的另一个模块中声明此类(ngLet 指令)的模块,但不需要它。
      我仍然不明白为什么会出现这个错误,但我很高兴它消失了……

      【讨论】:

        【解决方案3】:

        在我遇到的问题中,我使用 enableIvy: false 进行编译,但缺少一个模块的导出。该库编译得很好,但是在消费者端编译时,它给出了这个错误。导出缺少的模块,然后在消费者端安装解决了这个问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-06-19
          • 2016-01-24
          • 2018-01-03
          • 2018-02-02
          • 2018-07-31
          • 2019-07-27
          • 1970-01-01
          相关资源
          最近更新 更多