ng build throws error:“试图找到引导代码,但不能。”

时间:2018-02-19 17:21:43

标签: angular angular-cli ng-build

尝试使用ng-build构建我的应用时,出现以下错误:

  

试图找到引导代码,但不能。指定静态可分析引导代码或将entryModule传递给插件选项。

.angular-cli.json中指定的主文件非常简单:

import { NgModule } from '@angular/core';
import { LoginComponent } from './login.component';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
import { HttpClientModule } from '@angular/common/http';
import { LoginService } from '../login.service'


@NgModule({
    declarations: [
        LoginComponent
    ],
    imports: [
        BrowserModule,
        FormsModule,
        HttpClientModule
    ],
    providers: [LoginService],
    bootstrap: [LoginComponent]
})
export class AppModule { }

platformBrowserDynamic().bootstrapModule(AppModule);

ng --version返回以下内容:

Angular CLI: 1.7.0
Node: 6.11.0
OS: win32 x64
Angular: 5.2.5
... common, compiler, compiler-cli, core, forms
... platform-browser, platform-browser-dynamic

@angular/cli: 1.7.0
@angular-devkit/build-optimizer: 0.3.1
@angular-devkit/core: 0.3.1
@angular-devkit/schematics: 0.3.1
@ngtools/json-schema: 1.2.0
@ngtools/webpack: 1.10.0
@schematics/angular: 0.3.1
@schematics/package-update: 0.3.1
typescript: 2.7.2
webpack-replace: 1.0.0
webpack-vendor-chunk-plugin: 1.0.0
webpack: 3.11.0

2 个答案:

答案 0 :(得分:5)

从戴维的答案中得到了一个线索,我尝试了这个并为我工作。

第1步: 在与main.ts文件相同的文件夹中创建一个名为 AppModule.ts 的新文件。

第2步: 将所有内容从 main.ts 文件移动到 AppModule.ts 文件。

步骤3: 移动之后, main.ts 文件应仅具有以下代码:

import './polyfills';

import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import {AppModule} from './AppModule';

platformBrowserDynamic().bootstrapModule(AppModule);

步骤4 : 我的 AppModule.ts 文件具有以下代码。根据您的编码,您的AppModule.ts可能具有不同的代码。

import {HttpClientModule} from '@angular/common/http';
import {NgModule} from '@angular/core';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {BrowserModule} from '@angular/platform-browser';
import {YOURCustomCode} from './app/YOURCustomCode';

@NgModule({
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    FormsModule,
    HttpClientModule,
    DemoMaterialModule,
    MatNativeDateModule,
    ReactiveFormsModule,
  ],
  entryComponents: [YOURCustomCode],
  declarations: [YOURCustomCode],
  bootstrap: [YOURCustomCode],
  providers: []
})
export class AppModule {}

步骤5 : 运行命令ng serve,它将立即编译并生成,而没有错误引导程序模块错误。

答案 1 :(得分:0)

万一有人遇到同样的问题,我的案例中的问题是我在包含要引导的模块的同一文件中引导应用程序(即AppModule),而{{1}期望将模块导入到您调用ng build的文件中。相关代码位于bootstrapModule()中的函数resolveEntryModuleFromMain()中,该函数查找文件中声明的所有导入,其中node_modules\@ngtools\webpack\src\entry_resolver.js被调用以引导模块。将呼叫转移到resolveEntryModuleFromMain()到另一个文件并导入bootstrapModule()解决了问题(无论如何都是一种更好的做法)。