2016-11-03 3 views
8

Я пытаюсь преобразовать приложение, которое уже работало с Lazy загруженными модулями в AOT. Я использую инструментарий @ ngtools/webpack для компиляции кода AOT, однако я попадаю в сообщение об ошибке, когда Angular can not может найти код Lazy загруженного модуля, как кажется.Angular2 AOT с Lazy loading Невозможно решить [путь к ленивому модулю] .ngfactory.ts

ERROR in ./src/ngfactory async 
Module not found: Error: Can't resolve '/Library/WebServer/Documents/envato-teams/src/ngfactory/src/app/components/container/projects.ngfactory.ts' in '/Library/WebServer/Documents/envato-teams/src/ngfactory' 
@ ./src/ngfactory async 
@ ./~/@angular/core/src/linker/system_js_ng_module_factory_loader.js 
@ ./src/ngfactory/src/app/app.module.ngfactory.ts 
@ ./src/main.aot.ts 
@ multi main 

Стоит упомянуть в своем определении приложение маршрутов модуль этого проекта загружается лениво:

{ 
    path: 'projects', loadChildren: './components/container/projects#ProjectModule' 
}, 

Это как моя установка выглядит следующим образом:

TSconfig:

... 
"angularCompilerOptions": { 
    "genDir": "./src/ngfactory", 
    "entryModule": "src/app/app.module#AppModule" 
} 
... 

Webpack :

new ngtools.AotPlugin({ 
    tsConfigPath: './tsconfig.aot.json', 
}), 

Main.aot.ts

/* 
* Providers provided by Angular 
*/ 
import { platformBrowser } from '@angular/platform-browser'; 
import { AppModuleNgFactory } from './ngfactory/src/app/app.module.ngfactory'; 

import { Servicesconfig } from './app/services/index'; 

platformBrowser().bootstrapModuleFactory(AppModuleNgFactory); 

В WebPack я составителя тс файлы с @ ngtools/Webpack, выполнив:

// Support for .ts files. 
{ 
    test: /\.ts$/, 
    loaders: ['@ngtools/webpack'], 
    exclude: [/\.(spec|e2e)\.ts$/] 
}, 

Благодарим Вас за помощь!

+0

У вас есть такая же проблема ... пока не найдено никаких исправлений ... – user2363245

+1

Ответ, который я получил в данный момент в «Угловой», - это то, что AOT и ленивая нагрузка не играют хорошо вместе. Он скоро будет исправлен, хотя https://github.com/angular/angular-cli/commit/88131a08fd39eab5fc49dfce952207ee826bc8ef Его еще не сливают, но вскоре он должен быть выпущен и работать в @ ngtools/webpack –

ответ

8

Я боролся с AOT и Lazy загруженными модулями.

Выбор одного или другого не был действительно вариантом для сборки prod.

Даже если мне действительно нужны эти функции вместе, я не смог их получить и должен был сдаться. До сегодняшнего дня !

angular-cli сделал освобождение два дня назад: 1.0.0-beta.21, который поддерживает AOT и Lazy loading!

В вашей угловой Cli проекта:

npm cache clean 
npm install --save-dev [email protected] 
ng init 

Наслаждайтесь!

PS: Большое спасибо команде angular-cli, которая сделала потрясающую работу здесь ...!

EDIT:
Я сделал некоторые тесты:

+-----------------------+-------------+--------------+-----------+-------------+ 
|      | Main bundle | Chunk 0 | Scripting | First paint | 
+-----------------------+-------------+--------------+-----------+-------------+ 
| ng serve    | 4.5 MB  | Not splitted | 6075 ms | 5500+ ms | 
| ng serve --prod  | 334 KB  | Not splitted | 5587 ms | 4750+ ms | 
| ng serve --aot  | 3.3 MB  | 326 KB  | 4011 ms | 4400+ ms | 
| ng serve --prod --aot | 243 KB  | 18.1 Kb  | 3860 ms | 4250+ ms | 
+-----------------------+-------------+--------------+-----------+-------------+ 

(результаты не очень хорошо, потому что у меня есть много вещей, открытых и 3 мониторов и мой ноутбук боли^__ ^) ,

Вот что мы можем вспомнить от:
- Размер --prod --aot сборки 27% меньше чем --prod сборки
- The --prod --aot сборки 31% быстрее при сценарии, чем --prod сборки
- AOT круто!
- Вероятно, есть ошибка без флага aot, потому что, если я не пропустил что-то, я не мог найти ленивый загруженный кусок, которого я ожидал, и я нашел предполагаемый ленивый загруженный код в основной комплект. Я открыл issue на Github.

+0

Спасибо за это. все мыслится для меня, даже ленивые загружаемые модули загружаются, как ожидалось. – Manish

+0

AOT и ленивая загрузка хорошо работают прямо сейчас, если вы используете пакет https://www.npmjs.com/package/@ngtools/webpack, как я уже упоминал в предыдущем комментарии, это фиксировалось в то время, когда я разместил вопрос. –

+0

Можете ли вы сказать мне, нужно ли еще следовать шагам конфигурации, описанным в разделе «Угловая поваренная книга»: [link] (https://angular.io/docs/ts/latest/cookbook/aot-compiler.html#!#overview) ? Нужно ли мне все-таки строить, загружать модульные заводы? Вы используете отдельный tsconfig, aot? Похоже, что для нового проекта cli ng build --prod производит тот же размер, что и ng build --prod --aot. Im, использующий beta.30 для cli и угловой 2.4.7. Спасибо за отличную информацию. – Ibanez0