我在很多以前的SO问题中看到过这个错误,但是在升级到最新版本4.0.2之后,它们似乎都与这种情况无关。它不是循环DI,似乎与polifill无关。
我正在使用CheckForNull
和SystemJS
(不是网络包),也许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
答案 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文件进行调试,所以我觉得我不会因为这种方法而失去任何东西。
如果有人有更好的方法,请告诉我。