【问题标题】:Resolving "reflect-metadata shim is required when using class decorators" in Modular Angular 2 Component Project在模块化 Angular 2 组件项目中解决“使用类装饰器时需要反射元数据垫片”
【发布时间】:2016-08-25 22:14:23
【问题描述】:

我正在尝试创建一个包含 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 装饰器构建来自根项目的外部。

【问题讨论】:

    标签: angular reflect-metadata


    【解决方案1】:

    您必须在 SystemJS 配置中包含 reflect-metadatacrypto

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

    &lt;path&gt; 基于您的应用程序配置,node_modules 或您为应用程序提供服务的某个位置。

    如果您使用 Angular-CLI,请确保在 vendorNpmFiles 中包含 reflect-metadatacrypto 特定 js。

    希望这会有所帮助!

    【讨论】:

    • 不抱歉,这并没有真正的帮助:(。到目前为止,我发现如果我直接导​​入到根模块而不是尝试导出我不需要导入的@NgModule 'reflect-metadata' 但 jasmine 不会运行我的单元测试。如果我导入,那么我可以运行单元测试但我不能运行组件。
    • 你能在这里添加你的系统配置吗?
    • 我已经创建了我正在使用的配置的要点。它给了我错误localhost:5555/node_modules/crypto-js/package.json 404(未找到)。 gist.github.com/db3dev/688fb22315e2b724078963ba0b3749c0
    猜你喜欢
    • 2015-09-03
    • 2016-09-27
    • 2016-12-27
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 2020-11-24
    相关资源
    最近更新 更多