2016-09-19 47 views
15

我從遷移RC5 angular2我的應用程序angular-webpack腳手架角2 2.0.0角CLI測試14角2.0.0 Metadata_resolver怪異的行爲

我與這些錯誤的戰鬥:

Uncaught Error: Can't resolve all parameters for PublicInfoDao: (?, ?).CompileMetadataResolver.getDependenciesMetadata @ metadata_resolver.js:508CompileMetadataResolver.getTypeMetadata @ metadata_resolver.js:405(anonymous function) @ metadata_resolver.js:552CompileMetadataResolver.getProvidersMetadata @ metadata_resolver.js:532CompileMetadataResolver.getNgModuleMetadata @ metadata_resolver.js:285RuntimeCompiler._compileComponents @ runtime_compiler.js:126RuntimeCompiler._compileModuleAndComponents @ runtime_compiler.js:64RuntimeCompiler.compileModuleAsync @ runtime_compiler.js:55PlatformRef_._bootstrapModuleWithZone @ application_ref.js:303PlatformRef_.bootstrapModule @ application_ref.js:285(anonymous function) @ main.ts:13__webpack_require__ @ bootstrap db3609d…:52(anonymous function) @ .*$:7__webpack_require__ @ bootstrap db3609d…:52webpackJsonpCallback @ bootstrap db3609d…:23(anonymous function) @ main.bundle.js:1

metadata_resolver.js:278Uncaught Error: Unexpected value 'AppComponent' declared by the module 'AppModule'(anonymous function) @ metadata_resolver.js:278CompileMetadataResolver.getNgModuleMetadata @ metadata_resolver.js:265RuntimeCompiler._compileComponents @ runtime_compiler.js:126RuntimeCompiler._compileModuleAndComponents @ runtime_compiler.js:64RuntimeCompiler.compileModuleAsync @ runtime_compiler.js:55PlatformRef_._bootstrapModuleWithZone @ application_ref.js:303PlatformRef_.bootstrapModule @ application_ref.js:285(anonymous function) @ main.ts:13__webpack_require__ @ bootstrap db3609d…:52(anonymous function) @ .*$:7__webpack_require__ @ bootstrap db3609d…:52webpackJsonpCallback @ bootstrap db3609d…:23(anonymous function) @ main.bundle.js:1 1 : https://github.com/preboot/angular2-webpack

這是一個怪異的行爲的原因,如果我刪除幾個組件的應用作品。但是,如果我添加simplecomponent,如:

@Component({ 
    selector: 'tl-result-item', 
    templateUrl: "./resultitem.component.html", 
    styleUrls: ["./resultitem.component.scss"] 
}) 
export class ResultItemComponent { 

    @Input() 
    result:Result; 

    constructor(){} 
} 

時引發的第二個錯誤。如果我評論@Input()該應用程序的作品。 有一些服務,如果我取消註釋該應用程序拋出相同的錯誤,如果我評論一些行的錯誤消失。

我對這些錯誤瘋了。我認爲這應該是一個外部問題。

有什麼想法?

更新:

的第一個錯誤可能與https://github.com/AngularClass/angular2-webpack-starter#frequently-asked-questions(第二個問題) 我有幾個問題要遷移到角2.0.0決賽。

UPDATE2:

@NgModule({ 
    providers: [ 
    MetaService, 
    Title, 
    HttpInterceptor, 
    {provide: ConnectionBackend, useClass: XHRBackend}, 
    {provide: Http, useExisting: HttpInterceptor}, 
    {provide: Configuration, useClass: ConfigurationDevelopment} 
    ], 
    imports: [ 
    BrowserModule, 
    HttpModule, 
    FormsModule, 
    ReactiveFormsModule, 
    // APP_ROUTER_PROVIDERS 
    ], 
    declarations: [ 
    AppComponent, 
    ResultItemComponent, 

    TimestampToMomentPipe, 
    TimestampToTimePipe 
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { 
} 

UPDATE3: ,在角CLI失敗的代碼另一個例子。

此代碼正常工作:

this.publicService.all().subcribe(response => { 
     console.log(response); 
}); 

此代碼失敗:

this.publicService.all().subcribe(response => { 
     deserialize(response) 
}); 

異常上面所解釋的:

Uncaught Error: Can't resolve all parameters for PublicInfoDao: (?, ?).

¿¿??

+0

你有一個github回購重現這個問題? – yurzui

+0

不,但我可以驗證問題是與角度cli有關。我使用舊的腳手架和角2.0.0工作正常。那麼angular-cli會發生什麼? – Serginho

+0

你能分享你的app.module文件嗎? –

回答

1

environment.ts

// Angular 2 
// rc2 workaround 
import { enableDebugTools, disableDebugTools } from '@angular/platform-browser'; 
import { enableProdMode, ApplicationRef } from '@angular/core'; 
// Environment Providers 
let PROVIDERS: any[] = [ 
    // common env directives 
]; 

// Angular debug tools in the dev console 
// https://github.com/angular/angular/blob/86405345b781a9dc2438c0fbe3e9409245647019/TOOLS_JS.md 
let _decorateModuleRef = function identity<T>(value: T): T { return value; }; 

if ('production' === ENV) { 
    // Production 
    disableDebugTools(); 
    enableProdMode(); 

    PROVIDERS = [ 
    ...PROVIDERS, 
    // custom providers in production 
    ]; 

} else { 

    _decorateModuleRef = (modRef: any) => { 
    const appRef = modRef.injector.get(ApplicationRef); 
    const cmpRef = appRef.components[0]; 

    let _ng = (<any>window).ng; 
    enableDebugTools(cmpRef); 
    (<any>window).ng.probe = _ng.probe; 
    (<any>window).ng.coreTokens = _ng.coreTokens; 
    return modRef; 
    }; 

    // Development 
    PROVIDERS = [ 
    ...PROVIDERS, 
    // custom providers in development 
    ]; 

} 

export const decorateModuleRef = _decorateModuleRef; 

export const ENV_PROVIDERS = [ 
    ...PROVIDERS 
]; 

app.module.ts

@NgModule({ 
    providers: [ 
// expose our Services and Providers into Angular"s dependency injection 
     ENV_PROVIDERS 
    ], 
    imports: [ 
    BrowserModule, 
    HttpModule, 
    FormsModule, 
    ReactiveFormsModule, 
    // APP_ROUTER_PROVIDERS 
    ], 
    declarations: [ 
    AppComponent, 
    ResultItemComponent, 

    TimestampToMomentPipe, 
    TimestampToTimePipe 
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { 
} 
+0

沒關係,添加環境很好,但它不是問題的答案。 – Serginho

1

也許你正在使用出口桶這樣的:

export * from 'some-file'; 
export * from 'another-file'; 

在這種情況下,你可能會遇到循環依賴關係,儘管你自己的源代碼沒有任何循環依賴。

有時錯誤消息

Cannot resolve all parameters (some,thing,?)

表明你有一個循環依賴。

您可能會嘗試通過直接指定所需的文件導入您的組件,而不使用在index.ts,文件捆綁出口桶

你可能想看看這個所謂的問題:

Barrel Import Appears To Break Load Order


...你的問題實際上可能是這一個:-)的副本

Angular 2 DI Error - EXCEPTION: Can't resolve all parameters

+0

問題是...爲什麼我的代碼運行在角度爲2.0.0的angular-webpack腳手架上,如果我在angular-cli上運行腳本,會失敗?我一直在我的代碼中搜索「export *」:0結果。無論如何,謝謝你向我解釋錯誤並給我提供信息。 – Serginho

+0

[猜測:開]也許這兩個進程對待出口和進口的方式不同?我自己完全失去了關於這些新WebDev-Tools的編譯時間和運行時間[wild-guessing:off] –

+0

請參閱上面的update3。 @托比亞斯 - 以Gassmann – Serginho