Angular2,预编译功能模块时的元数据错误

时间:2016-09-05 17:57:28

标签: angular typescript module npm

我正在使用Angular2 RC6编写Angular2库。

此库包含单个模块:

import { Component, OnInit, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

@Component({
    selector: 'yeva',
    template: '<div></div>'
})
export class YevaComponent  {
    constructor() { }
}


@NgModule({
  imports: [CommonModule],
  declarations: [YevaComponent],
  providers: [],
  exports: [YevaComponent]
})
export class YevaModule {

}

如果我将此代码复制粘贴到现有Angular2应用程序的TypeScript文件中,并尝试直接使用此模块,那么它可以正常工作......

但我的目标是建立一个外部的npm库。

如果我在一个独立的项目中移动这个完全相同的代码:

https://github.com/ClementVidal/starter.yeva

(此项目配置为用作Angular2库,使用TypeScript进行编译,以供我的客户端应用程序使用。)

我收到以下错误:

模块'AppModule'导入的意外值'YevaModule'

以下是我在两种情况下导入模块的方法:

@NgModule({
  imports: [BrowserModule,YevaModule],
  declarations: [AppComponent],
  providers: [
    FOUNDATION_PROVIDERS
  ],
  bootstrap: [AppComponent]
})
export class AppModule {

}

此错误来自Angular编译器:

var importedMeta = _this.getNgModuleMetadata(importedModuleType, false);
if (importedMeta === null) {
   throw new Error("Unexpected " + _this._getTypeDescriptor(importedType) + " '" + stringify(importedType) + "' imported by the module '" + stringify(moduleType) + "'");
}

我的模块 在导入为预编译模块时似乎不包含任何元数据

我试图通过查看已编译的代码来解决这个问题,但我没有找到任何内容......

以下是重现此错误的方法:

mkdir test-metadata
cd test-metadata
git clone git@github.com:ClementVidal/starter.yeva.git
git clone git@github.com:ClementVidal/starter.themba.git
cd starter.yeva
npm install
sudo npm link
cd ../starter.themba
git checkout module-metadata
sudo npm link __TITLE__
npm install
npm run server

然后浏览到http://localhost:8080/

你们有没有尝试过这类问题?

2 个答案:

答案 0 :(得分:2)

似乎应该由库作者提供一个或多个元数据文件,每个.d.ts定义文件一个。元数据文件由Angular AOT编译器生成( angular-cli )。

以下是对角色的引用:

这是一个图书馆作者应用更改以支持AOT编译器的示例:

我也在为另一个库添加支持并将其作为PR提交

HTH

答案 1 :(得分:0)

你没有使用npm链接试试吗?也许这就是问题所在;我知道webpack正在努力......

从npm真正安装你的库可以工作。你应该尝试发布一个alpha版本来检查,因为我的代码中没有看到任何错误。