0

我正在尝试创建一个包含 Angular 2 装饰器的打字稿包。这个包的目的是导出一个 NgModule 以在 npm 安装后导入到更大的项目中。

当我尝试通过 jasmine 运行测试时,我收到错误消息:

/Users/don286/Dev/Angular2Modules/viewengine/node_modules/@angular/core/src/util/decorators.js:173                                                                                       
    throw 'reflect-metadata shim is required when using class decorators';   

我的 package.json 中有这些包:

"devDependencies": {
"@angular/core": "^2.0.0-rc.5",
"@types/es6-shim": "0.0.30",
"@types/node": "^6.0.37",
"jasmine": "^2.4.1",
"reflect-metadata": "0.1.3",
"rxjs": "5.0.0-beta.6",
"zone.js": "^0.6.17"
}

我试图将反射元数据导入项目,但它不起作用......我能够成功运行所有测试。这里的问题是当我尝试导入模块并使用导出的组件时。我留下了这个问题:

views:169 Error: Error: XHR error (404 Not Found) loading http://localhost:5555/node_modules/crypto/package.json(…)

如果我尝试只使用模块而不添加导入,那么它不会识别任何 Angular 指令属性,并且会针对 html 中的每个方面发出错误。示例错误如下所示:

zone.js?1472162416591:461 Unhandled Promise rejection: Template parse errors: Can't bind to 'ngClass' since it isn't a known property of 'div'.

这是查看如何处理导出的索引文件:

import { NgModule } from '@angular/core';
import { Component } from './lib/component/Component.component';

export const DIRECTIVES: any[] = [
Component
];

@NgModule({
exports: DIRECTIVES,
declarations: DIRECTIVES
})
export class Module { }

我一直在寻找其他项目以及他们如何做到这一点,但我找不到任何特别不同的东西......我不确定我缺少什么或不明白让这些 Angular 装饰器从外部构建根项目。

4

1 回答 1

0

您必须在 SystemJS 配置中包含reflect-metadata和。crypto

 'reflect-metadata': '<path>/reflect-metadata/Reflect.js',
 'crypto': '<path>/crypto-js/crypto-js.js',

<path>取决于您的应用程序配置,无论是node_modules在您为应用程序提供服务的地方还是在某处。

reflect-metadata如果您使用 Angular-CLI ,请确保cryptovendorNpmFiles.

希望这可以帮助!!

于 2016-08-25T22:49:47.543 回答