[英]Angular2, AoT compilation: Cannot determine the module for component AppComponent
Summary: I am trying to use Angular2 AoT for my Angular2 application, but since I have static providers to pass some values from server to Angular2, ngc
shows some errors. 简介:我正在尝试将Angular2 AoT用于我的Angular2应用程序,但由于我有静态提供程序将一些值从服务器传递到Angular2,因此ngc
显示了一些错误。 My problem is how to get the ngFactory
files created using ngc
. 我的问题是如何使用ngc
创建ngFactory
文件。
Details: I am using the cookbook guide , and running "node_modules/.bin/ngc" -p tsconfig-aot.json
shows me the below error: 详细信息:我正在使用食谱指南 ,并运行"node_modules/.bin/ngc" -p tsconfig-aot.json
向我显示以下错误:
Error: Cannot determine the module for component AppComponent!
at F:\workspace\node\my-project\node_modules\@angular\compiler\bundles\compiler.umd.js:12839:25
at Array.map (native)
at OfflineCompiler.compile (F:\workspace\node\my-project\node_modules\@angular\compiler\bundles\compiler.umd.js:12835:31)
at F:\workspace\node\my-project\node_modules\@angular\compiler-cli\src\codegen.js:108:18
at Array.map (native)
at CodeGenerator.codegen (F:\workspace\node\my-project\node_modules\@angular\compiler-cli\src\codegen.js:106:38)
at codegen (F:\workspace\node\my-project\node_modules\@angular\compiler-cli\src\main.js:7:81)
at Object.main (F:\workspace\node\my-project\node_modules\@angular\tsc-wrapped\src\main.js:30:16)
at Object.<anonymous> (F:\workspace\node\my-project\node_modules\@angular\compiler-cli\src\main.js:14:9)
at Module._compile (module.js:541:32)
Compilation failed
tsconfig-aot.json: tsconfig-aot.json:
{
"compilerOptions": {
"target": "es5",
"module": "es2015",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
},
"exclude": [
"node_modules",
"typings"
],
"angularCompilerOptions": {
"genDir": "aot",
"skipMetadataEmit" : true
}
}
package.json: 的package.json:
{
"name": "my-project",
"version": "1.0.0",
"scripts": {
"postinstall": "typings install"
},
"license": "ISC",
"dependencies": {
"@angular/common": "~2.0.1",
"@angular/compiler": "~2.0.1",
"@angular/compiler-cli": "^0.6.0",
"@angular/core": "~2.0.1",
"@angular/forms": "~2.0.1",
"@angular/http": "~2.0.1",
"@angular/platform-browser": "~2.0.1",
"@angular/platform-browser-dynamic": "~2.0.1",
"@angular/platform-server": "^2.2.1",
"@angular/router": "~3.0.1",
"@angular/upgrade": "~2.0.1",
"body-parser": "^1.15.2",
"cookie-parser": "^1.4.3",
"core-js": "^2.4.1",
"crypto": "0.0.3",
"express": "^4.14.0",
"express-mysql-session": "^1.2.0",
"express-session": "^1.14.1",
"hammerjs": "^2.0.8",
"reflect-metadata": "^0.1.8",
"rxjs": "5.0.0-beta.12",
"systemjs": "0.19.39",
"zone.js": "^0.6.25",
// Other dependancies
},
"devDependencies": {
"concurrently": "^3.0.0",
"typescript": "^2.0.3",
"typings": "^1.4.0"
}
}
index.pug: index.pug:
html
head
base(href=config.baseUrl)
title My title
meta(charset='UTF-8')
meta(name='viewport', content='width=device-width, initial-scale=1')
link(rel='stylesheet', href="node_modules/ng2-toastr/bundles/ng2-toastr.min.css")
link(rel='stylesheet', href='node_modules/ng2-material/ng2-material.css')
link(rel='stylesheet', href='public/styles/index.css')
script(src='node_modules/core-js/client/shim.min.js')
script(src='node_modules/zone.js/dist/zone.js')
script(src='node_modules/reflect-metadata/Reflect.js')
script(src='node_modules/systemjs/dist/system.src.js')
script(src='systemjs.config.js')
script
| System.import('app')
| .then(module => module.main(!{JSON.stringify(config)}), console.error.bind(console) );
body
tt-app My application, loading waiter application ...
main.ts: main.ts:
/// <reference path="../../typings/index.d.ts" />
import {platformBrowserDynamic} from "@angular/platform-browser-dynamic";
import {createMainModule} from "./app.module";
export const main = (SERVER_CONFIG) => {
platformBrowserDynamic().bootstrapModule(createMainModule(SERVER_CONFIG));
};
app.module.ts: app.module.ts:
import {NgModule} from "@angular/core";
import {BrowserModule} from "@angular/platform-browser";
import {AppComponent} from "./app/app.component";
import {routing} from "./app.routing";
import {HttpModule} from "@angular/http";
import {AuthService} from "./auth.service";
import {ConfigService} from "./config.service";
import {CustomersModule} from "./customers/customers.module";
export const createMainModule = (SERVER_CONFIG) => {
@NgModule({
imports: [
BrowserModule,
routing,
HttpModule,
],
declarations: [AppComponent],
providers: [
AuthService,
{
provide: "SERVER_CONFIG",
useValue: SERVER_CONFIG
},
ConfigService
],
bootstrap: [AppComponent]
})
class AppModule {
}
return AppModule;
};
app.component.ts: app.component.ts:
import {Component, OnInit} from "@angular/core";
import {ConfigService} from "../config.service";
import {AuthService} from "../auth.service";
import {Router} from "@angular/router";
@Component({
selector: 'tt-app',
templateUrl: 'partials/app/app.component'
})
export class AppComponent implements OnInit {
user;
constructor(private _configServer: ConfigService,
private _authService: AuthService,
private _router: Router) {
}
ngOnInit(): void {
this.user = this._configServer.server.user;
}
logout() {
this._authService
.logout()
.then((result)=> {
})
.catch((error)=> {
this._router.navigate(['/login']);
});
}
}
Update 1: As mentioned in the comments, I verified that if I remove code for static provider, that I used for passing data from servver to Angular2, ie createMainModule()
in app.module.ts, and so on, then ngc
works fine. 更新1:如评论中所述,我验证了如果我删除静态提供程序的代码,我用于将数据从servver传递到Angular2,即app.module.ts中的createMainModule()
,依此类推,那么ngc
工作正常。
Update 2: I am using SystemJS as the module loader. 更新2:我使用SystemJS作为模块加载器。
Add AppComponent
to bootstrap
instead of AuthComponent
and add AppComponent
to declarations
as well: 将AppComponent
添加到bootstrap
而不是AuthComponent
,并将AppComponent
添加到declarations
中:
@NgModule({
imports: [
BrowserModule,
SharedModule,
authRouting,
LoginModule
],
providers: [
AuthService,
{
provide: "SERVER_CONFIG",
useValue: SERVER_CONFIG
},
ConfigService
],
declarations: [AppComponent, AuthComponent],
bootstrap: [AppComponent]
})
class AuthModule {
}
i was getting the same error. 我得到了同样的错误。 i tried to build it in --prod mode. 我试图在--prod模式下构建它。
then i tried :- ng build --env=prod . 然后我尝试了: - ng build --env = prod 。 it worked for me. 它对我有用。
This may also be caused when you are using a third party library and trying AOT on top, check the following link 当您使用第三方库并在顶部尝试AOT时,也可能会导致此问题,请检查以下链接
Angular 2 Aot Error: 'ToastsManager' is not exported Angular 2 Aot错误:未导出'ToastsManager'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.