简体   繁体   English

Typescript(或angular2)错误:没有RuntimeMetadataResolver的提供程序

[英]Typescript (or angular2) Error: No provider for RuntimeMetadataResolver

I'm new in Typescript/Angular2 languages. 我在打字稿/ Angular2语言 I'm trying to develop sample application from a Typescript book but I always get the following error: 我正在尝试从Typescript书开发示例应用程序,但我总是收到以下错误:

No provider for RuntimeMetadataResolver (ComponentResolver -> RuntimeCompiler -> RuntimeMetadataResolver)

in the browser console. 在浏览器控制台中。 I think the problem is in component version in packages.json. 我认为问题出在packages.json中的组件版本中。 Angular2 has been installed using npm install so the version is 2.0beta17. Angular2已使用npm install安装,因此版本为2.0beta17。

Stacktrace: 堆栈跟踪:

BaseException@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:25797:23 [angular]
AbstractProviderError@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:26406:9 [angular]
NoProviderError@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:26442:9 [angular]
ReflectiveInjector_.prototype._throwOrNull@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27967:19 [angular]
ReflectiveInjector_.prototype._getByKeyDefault@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27995:20 [angular]
ReflectiveInjector_.prototype._getByKey@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27958:20 [angular]
ReflectiveInjector_.prototype._getByReflectiveDependency@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27948:16 [angular]
ReflectiveInjector_.prototype._instantiate@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27845:31 [angular]
ReflectiveInjector_.prototype._instantiateProvider@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27817:20 [angular]
ReflectiveInjector_.prototype._new@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27806:16 [angular]
ReflectiveInjectorDynamicStrategy.prototype.getObjByKeyId@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27461:36 [angular]
ReflectiveInjector_.prototype._getByKeyDefault@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27986:23 [angular]
ReflectiveInjector_.prototype._getByKey@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27958:20 [angular]
ReflectiveInjector_.prototype._getByReflectiveDependency@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27948:16 [angular]
ReflectiveInjector_.prototype._instantiate@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27845:31 [angular]
ReflectiveInjector_.prototype._instantiateProvider@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27817:20 [angular]
ReflectiveInjector_.prototype._new@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27806:16 [angular]
ReflectiveInjectorDynamicStrategy.prototype.getObjByKeyId@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27461:36 [angular]
ReflectiveInjector_.prototype._getByKeyDefault@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27986:23 [angular]
ReflectiveInjector_.prototype._getByKey@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27958:20 [angular]
ReflectiveInjector_.prototype.get@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:27767:16 [angular]
coreLoadAndBootstrap/<@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:36582:33 [angular]
ApplicationRef_.prototype.run/<@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:36774:26 [angular]
NgZoneImpl/this.inner<.onInvoke@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:32701:32 [angular]
Zone.prototype.run@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:117:24 [<root> => angular]
NgZoneImpl.prototype.runInner@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:32732:60 [<root>]
NgZone.prototype.run@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:32968:51 [<root>]
ApplicationRef_.prototype.run@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:36772:9 [<root>]
coreLoadAndBootstrap@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:36581:12 [<root>]
bootstrap@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:68267:12 [<root>]
@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:68328:1 [<root>]
@file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:1:2 [<root>]
  index.js:45341:13
    BrowserDomAdapter.prototype.logError file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:45341:13
    ExceptionHandler.prototype.call file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:25704:13
    ApplicationRef_.prototype.run/< file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:36783:17
    ZoneDelegate.prototype.invoke file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:233:17
    NgZoneImpl/this.inner<.onInvoke file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:32701:32
    ZoneDelegate.prototype.invoke file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:232:17
    Zone.prototype.run file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:117:24
    NgZoneImpl.prototype.runInner file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:32732:60
    NgZone.prototype.run file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:32968:51
    ApplicationRef_.prototype.run file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:36772:9
    coreLoadAndBootstrap file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:36581:12
    bootstrap file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:68267:12
    <anonimo> file:///C:/ProgettiWeb/TestAngular/Chapter2/static/scripts/index.js:68328:1
    <anonimo>

Package.json: 的package.json:

{
  "name": "weather-widget",
  "version": "1.0.0",
  "private": true,
  "description": "",
  "dependencies": {
    "angular2": "^2.0.0-beta.17",
    "es6-shim": "^0.35.1",
    "reflect-metadata": "^0.1.2",
    "rxjs": "^5.0.0-beta.6",
    "zone.js": "^0.6.12"
  },
  "devDependencies": {
    "gulp": "^3.9.1",
    "gulp-sourcemaps": "^1.9.1",
    "gulp-typescript": "^3.1.3",
    "gulp-uglify": "^2.0.0",
    "small": "^0.2.7"
  }
}

lib/index.ts: LIB / index.ts:

import "zone.js";
import "rxjs";
import "reflect-metadata";
import "es6-shim";

import { bootstrap } from "angular2/platform/browser";
import {About} from "./about";

bootstrap(About).catch(err => console.error(err));

lib/about.ts LIB / about.ts

import { Component } from "angular2/core";

@Component({
    selector: "about-page",
    template: `
        <h2>About</h2>
        This widget shows the weather forecast of Utrecht.
        The next 24 hours are shown under 'Today' and the forecast of 24-48 hours ahead under 'Tomorrow'.
        `
})
export class About {

}

lib/tsconfig.json LIB / tsconfig.json

{
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "lib": ["es2015", "dom"]
    }
}

gulpfile.js gulpfile.js

var gulp = require('gulp');
var typescript = require('gulp-typescript');
var small = require('small').gulp;
var sourcemaps = require('gulp-sourcemaps');
var uglify = require('gulp-uglify');

var tsProject = typescript.createProject('lib/tsconfig.json', {
    typescript: require('typescript')
});

gulp.task('compile', function() {
    return gulp.src('lib/**/*.ts')
        .pipe(sourcemaps.init())
        .pipe(tsProject())
        .pipe(small('index.js', {
            externalResolve: ['node_modules'],
            globalModules: {
                "crypto": {
                    standalone: "undefined"
                }
            }
        }))
        .pipe(sourcemaps.write('.'))
        .pipe(gulp.dest('static/scripts'));
});
gulp.task('release', ['compile'], function() {
    return gulp.src('static/scripts/scripts.js')
        .pipe(uglify())
        .pipe(gulp.dest('static/scripts'));
});

gulp.task('default', ['compile']);

static/index.html 静态/ index.html的

<!DOCTYPE HTML>
<html>
    <head>
        <title>Weather</title>
        <link rel="stylesheet" href="style.css" />
    </head>
    <body>
        <div id="wrapper">
            <about-page>Loading..</about-page>
        </div>
        <script src="scripts/index.js" type="text/javascript"></script>
    </body>
</html>

Then I run "gulp", I load the index.html in the browser and I get that error. 然后我运行“gulp”,我在浏览器中加载index.html,我得到了这个错误。

I have a node_modules folder created dynamically which contains an angular2 folder... 我有一个动态创建的node_modules文件夹,其中包含一个angular2文件夹...

Thanks in advance. 提前致谢。

EDIT: I checked my index.js generated file and 编辑:我检查了我的index.js生成的文件和

var RuntimeMetadataResolver = (function () {

is present. 存在。 Moreover, 此外,

exports.COMPILER_PROVIDERS

contains 包含

__small$_xxx.RuntimeMetadataResolver

EDIT2: No error in npm ls command EDIT2: npm ls命令没有错误

This appears to be not an issue with Angular, nor TypeScript, but the module bundler Small had a bug. 这似乎不是Angular和TypeScript的问题,但模块捆绑器Small有一个bug。 A file a/b could be compiled twice (under conditions), namely as a/b and a\\b . 文件a/b可以编译两次(在条件下),即a/ba\\b This only happened on Windows. 这只发生在Windows上。 This broke some functionality of Angular. 这破坏了Angular的一些功能。 Can you try to update to small@0.2.8 ? 你能尝试更新到small@0.2.8吗?

Try to upgrade from beta to latest version of angular and try. 尝试从beta升级到最新版本的角度并尝试。

Try using "npm update" 尝试使用“npm update”

you should import it in the root module class according to the documentation . 您应该根据文档根模块类中导入它。 In your case it should be: 在你的情况下,它应该是:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM