2017-06-20 40 views
0

我使用Angular CLI創建了一個應用程序,它在JIT編譯中工作正常。我覺得我需要更快地創建應用程序,所以我計劃將應用程序從JIT轉換爲AOT。Angular CLI - 在ng build期間出現AOT錯誤

我跟着正在由angular.io

https://angular.io/guide/aot-compiler

本文檔中提到的指令。

我成功地轉換了一些步驟,這些步驟可以幫助我們將所有文件轉換爲ngFactory,完成了沒有錯誤的彙總過程。

我得到錯誤,當我執行ng build --aot

的錯誤消息是如下

Tried to find bootstrap code, but could not. Specify either statically analyzable bootstrap code or pass in an entryModule to the plugins options. Error: Tried to find bootstrap code, but could not. Specify either statically analyzable bootstrap code or pass in an entryModule to the plugins options. at Object.resolveEntryModuleFromMain (/Users/wakdev/WebstormProjects/wak_ang2_angcli/node_modules/@ngtools/webpack/src/entry_resolver.js:128:11) at AotPlugin._setupOptions (/Users/wakdev/WebstormProjects/wak_ang2_angcli/node_modules/@ngtools/webpack/src/plugin.js:143:50) at new AotPlugin (/Users/wakdev/WebstormProjects/wak_ang2_angcli/node_modules/@ngtools/webpack/src/plugin.js:26:14) at _createAotPlugin (/Users/wakdev/WebstormProjects/wak_ang2_angcli/node_modules/@angular/cli/models/webpack-configs/typescript.js:55:12) at Object.exports.getAotConfig (/Users/wakdev/WebstormProjects/wak_ang2_angcli/node_modules/@angular/cli/models/webpack-configs/typescript.js:88:19) at NgCliWebpackConfig.buildConfig (/Users/wakdev/WebstormProjects/wak_ang2_angcli/node_modules/@angular/cli/models/webpack-config.js:26:37) at Class.run (/Users/wakdev/WebstormProjects/wak_ang2_angcli/node_modules/@angular/cli/tasks/build.js:27:92) at Class.run (/Users/wakdev/WebstormProjects/wak_ang2_angcli/node_modules/@angular/cli/commands/build.js:149:26) at Class.Command.validateAndRun (/Users/wakdev/WebstormProjects/wak_ang2_angcli/node_modules/@angular/cli/ember-cli/lib/models/command.js:128:15) at /Users/wakdev/WebstormProjects/wak_ang2_angcli/node_modules/@angular/cli/ember-cli/lib/cli/cli.js:92:22 at tryCatch (/Users/wakdev/WebstormProjects/wak_ang2_angcli/node_modules/rsvp/dist/rsvp.js:539:12) at invokeCallback (/Users/wakdev/WebstormProjects/wak_ang2_angcli/node_modules/rsvp/dist/rsvp.js:554:13) at /Users/wakdev/WebstormProjects/wak_ang2_angcli/node_modules/rsvp/dist/rsvp.js:629:16 at flush (/Users/wakdev/WebstormProjects/wak_ang2_angcli/node_modules/rsvp/dist/rsvp.js:2414:5) at _combinedTickCallback (internal/process/next_tick.js:67:7) at process._tickCallback (internal/process/next_tick.js:98:9)

這裏是我的main.ts

import { platformBrowser } from '@angular/platform-browser'; 
import {AppModuleNgFactory} from '../aot/src/app/app.module.ngfactory'; 

console.log('Running AOT compiled'); 
//platformServer().bootstrapModuleFactory(AppModuleNgFactory); 
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory); 

我tsconfig-aot.json

{ 
    "compilerOptions": { 
    "target": "es5", 
    "module": "es2015", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "lib": ["es2015", "dom"], 
    "noImplicitAny": false, 
    "suppressImplicitAnyIndexErrors": true, 
    "typeRoots": [ 
     "./node_modules/@types/" 
    ] 
    }, 

    "files": [ 
    "src/app/app.module.ts", 
    "src/main.ts", 
    ], 

    "angularCompilerOptions": { 
    "genDir": "aot", 
    "skipMetadataEmit" : true 
    } 
} 

有沒有人有同樣的問題

+1

如果您使用的是angular-cli,請按照它自己的文檔。您的文件夾結構不正確。你的main.ts應該導入與它在同一個文件夾中的模塊。 – echonax

+0

這些說明是爲不使用Angular CLI的項目手動實現AOT。 –

回答

1

正如在評論中提到的,如果你使用的cli,然後運行ng build --prod應該做你的建築,aot和樹顫抖。如果你想要做更多的手動路由,因爲你正在做的比你需要到另一行添加到您的angularCompileOptions讓它們看起來像這樣:

"angularCompilerOptions": { 
    "genDir": "aot", 
    "entryModule": "app/app.module#AppModule", 
    "skipMetadataEmit" : true 
    } 

因爲你不顯示您的實際模塊,您可能需要更新路徑和模塊名稱,但該屬性很可能是您缺少的。

+0

NG建立--prod命令工作正常,沒有任何問題, 但是當我嘗試使用手動配置 「angularCompilerOptions」:{ 「genDir」: 「AOT」, 「entryModule」:「應用程序/ app.module# AppModule「, 」skipMetadataEmit「:true } 這一個不起作用 – skid

+0

這真的取決於你的項目。我發佈的路徑可能是關閉的或命名。看看你發佈的其他文件,也許它需要是'「src/app/app.module#AppModule」'。 – peinearydevelopment