错误:无法解析XXX的所有参数:(?)。 Angular 4.0.2

时间:2017-04-12 17:01:52

标签: angular typescript systemjs

我在很多以前的SO问题中看到过这个错误,但是在升级到最新版本4.0.2之后,它们似乎都与这种情况无关。它不是循环DI,似乎与polifill无关。

我正在使用CheckForNullSystemJS(不是网络包),也许jspm与问题有关,但我无法弄清楚如何。

app入口点是main.ts:

jspm

我的模块import 'core-js/es7/reflect'; import 'zone.js/dist/zone'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { AppModule2 } from './app/app.module2'; platformBrowserDynamic().bootstrapModule(AppModule2); 非常简单:

app.module2.ts

当我启动应用程序(使用Chrome 57)时,错误是:

import { NgModule, Component } from '@angular/core';
import { HttpModule, Http } from '@angular/http';
import { BrowserModule } from '@angular/platform-browser';

@Component({
  selector: 'app-home',
  template: `<h2>Hola</h2>`    
})
export class HomeComponent {
  constructor(private http : Http) {
  }
}

@NgModule({
  imports: [
   BrowserModule, HttpModule
  ],
  declarations: [
    HomeComponent
  ],
  bootstrap: [ HomeComponent ],
  entryComponents: [  ],
  providers: [
  ]
})
export class AppModule2 { }

如果我在Error: Can't resolve all parameters for HomeComponent: (?). Evaluating http://localhost:3000/src/main.ts Loading myapp at syntaxError (http://localhost:3000/jspm_packages/npm/@angular/compiler@4.0.2/bundles/compiler.umd.js:1513:34) [<root>] at CompileMetadataResolver._getDependenciesMetadata (http://localhost:3000/jspm_packages/npm/@angular/compiler@4.0.2/bundles/compiler.umd.js:14363:35) [<root>] at CompileMetadataResolver._getTypeMetadata (http://localhost:3000/jspm_packages/npm/@angular/compiler@4.0.2/bundles/compiler.umd.js:14231:26) [<root>] at CompileMetadataResolver.getNonNormalizedDirectiveMetadata (http://localhost:3000/jspm_packages/npm/@angular/compiler@4.0.2/bundles/compiler.umd.js:13840:24) [<root>] at CompileMetadataResolver._getEntryComponentMetadata (http://localhost:3000/jspm_packages/npm/@angular/compiler@4.0.2/bundles/compiler.umd.js:14484:45) [<root>] at eval (http://localhost:3000/jspm_packages/npm/@angular/compiler@4.0.2/bundles/compiler.umd.js:14067:108) [<root>] at Array.map (native) [<root>] at CompileMetadataResolver.getNgModuleMetadata (http://localhost:3000/jspm_packages/npm/@angular/compiler@4.0.2/bundles/compiler.umd.js:14067:73) [<root>] at JitCompiler._loadModules (http://localhost:3000/jspm_packages/npm/@angular/compiler@4.0.2/bundles/compiler.umd.js:25144:64) [<root>] at JitCompiler._compileModuleAndComponents (http://localhost:3000/jspm_packages/npm/@angular/compiler@4.0.2/bundles/compiler.umd.js:25103:52) [<root>] at JitCompiler.compileModuleAsync (http://localhost:3000/jspm_packages/npm/@angular/compiler@4.0.2/bundles/compiler.umd.js:25065:21) [<root>] at PlatformRef_._bootstrapModuleWithZone (http://localhost:3000/jspm_packages/npm/@angular/core@4.0.2/bundles/core.umd.js:4793:25) [<root>] at PlatformRef_.bootstrapModule (http://localhost:3000/jspm_packages/npm/@angular/core@4.0.2/bundles/core.umd.js:4779:21) [<root>] at Object.execute (http://localhost:3000/src/main.ts!transpiled:19:65) [<root>] 中移除Http注入,则应用已成功加载。

我的tsconfig.json

HomeComponent

1 个答案:

答案 0 :(得分:0)

经过多次测试后,问题不在于角度代码,而是在基于systemjs的加载系统和jspm提供的默认配置中,它们在typescript(.ts)中加载文件,浏览器在运行时编译为js。可能是转换器plugin-typescript的问题。

这个过程有问题,我不知道究竟究竟是什么,无论如何,如果我们配置systemjs直接在js中加载模块,那么问题就会消失。

我已删除模块格式中所有对typescript的引用,因此从原始文件中删除config:

transpiler: "plugin-typescript",
packages: {
    "main": {
      "main": "main.ts",
      "format": "esm",
      "defaultExtension": "ts",
      "meta": {
        "*.ts": {
          "loader": "plugin-typescript"
        }
      }
    }
},

它变成了:

transpiler: false,
packages: {
    'app': {
      defaultExtension: 'js'
    },
    'main': {
      main: 'main.js',
      defaultExtension: 'js'
    }
},
map: {
    'main': 'src',
    'app': 'src/app'
}

现在应用程序加载没有问题。

我使用VS Code对应用程序进行编程,因此当我编辑.ts文件时会自动生成.js和.map文件,转换过程在开发时完成,此外使用Chrome,我可以使用原始的.ts文件进行调试,所以我觉得我不会因为这种方法而失去任何东西。

如果有人有更好的方法,请告诉我。