使用自定义 Angular AOT 组件库 - JSON 中的意外标记 t

Consuming Custom Angular AOT Component Library - Unexpected token t in JSON

我有一个用 Typescript 创建的组件库,Angular 2. 我的 Web 应用程序通过 npm 使用这个库。组件库本身使用 JIT 和 AOT 编译构建,但使用它的 Web 应用程序只能使用 JIT 编译成功构建,使用 AOT 编译会出错。

以前,我有一个错误,它说 MyComponentsModule 不是 NgModule 或类似的东西。这是通过使用 Angular 编译器 (ngc) 生成 .metadata.json 文件并将它们包含在我的节点模块中解决的。

我目前遇到的错误是
ERROR in Unexpected token t in JSON at position 556, resolving symbol AppModule in C:/Projects/MyWebApplication/src/app/app.module.ts, resolving symbol AppModule in C:/Projects/MyWebApplication/src/app/app.module.ts.
这个错误本身实际上并没有告诉我问题出在哪个 JSON 文件中。但是,在构建过程中进一步报告了另一条消息(我只能假设是相关的),其中指出
Failed to read JSON file C:/Projects/MyWebApplication/node_modules/mycustompackage/definitions/components/address-search/address-component.metadata.json.

地址组件是我创建的组件之一,指定的文件是ngc为其生成的元数据。

如有任何建议或调查途径,我们将不胜感激。

经过一些调查,我发现为具有模板的组件生成的 metadata.json 文件无效。更具体地说,ngc 将 metadata.json 内的模板 html 作为 属性 内联,但存在一些问题:

  • 模板 属性 未包含在引号中,例如:"template"
  • 模板的值 属性 用单引号而不是双引号引起来

为了解决我的问题并允许我的 Web 应用程序使用我的节点模块中的 Angular 模块,我只是将 Angular 模块的 metadata.json 文件复制到我的包中并忽略了所有其他 metadata.json 个文件。

这可能不是 'correct' 修复,但它起作用了,到目前为止我还没有发现应用程序有任何问题。