我正在使用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
你们有没有尝试过这类问题?
答案 0 :(得分:2)
似乎应该由库作者提供一个或多个元数据文件,每个.d.ts
定义文件一个。元数据文件由Angular AOT编译器生成( angular-cli )。
以下是对角色的引用:
这是一个图书馆作者应用更改以支持AOT编译器的示例:
我也在为另一个库添加支持并将其作为PR提交
HTH
答案 1 :(得分:0)
你没有使用npm链接试试吗?也许这就是问题所在;我知道webpack正在努力......
从npm真正安装你的库可以工作。你应该尝试发布一个alpha版本来检查,因为我的代码中没有看到任何错误。