2016-10-16 3 views
5

Когда я запускаю приложение Angular 2 с помощью JIT, все работает нормально. Но после того, как я перейти на АОТ мое приложение начинает вытягивать связи с дополнительным префиксом («/ SRC/линкер/ng_module_factory»), например:Угловой 2 AOT не работает. Почему «platformBrowser(). BootstrapModuleFactory« вытягивает ссылки с дополнительным префиксом »/ src/linker/ng_module_factory?

JIT тянет: http://localhost:8080/node_modules/@angular/core/bundles/core.umd.js

АОТ тянет: http://localhost:8080/node_modules/@angular/core/bundles/core.umd.js/src/linker/ng_module_factory Где постфикса /src/linker/ng_module_factory пришел из?

О приложении. Я использую Java 8 + Spring 4.3.2.RELEASE + Angular 2 + Tomcat 9.0.0.M6.

src 
--main 
----webapp 
------resources 
--------app 
----------app.component.css 
----------app.component.ts 
----------app.module.ts 
----------main.ts 
--------index.html 
--------package.json 
--------systemjs.config.js 
--------tsconfig.json 
--------typings.json 
------WEB-INF 
--------dispatcher-servlet.xml 
--------web.xml 

package.json

{ 
    "name": "my-app", 
    "version": "1.0.0", 
    "scripts": { 
    "postinstall": "typings install" 
    }, 
    "license": "MIT", 
    "dependencies": { 
    "@angular/common": "2.0.0", 
    "@angular/compiler": "2.0.0", 
    "@angular/core": "2.0.0", 
    "@angular/platform-browser": "2.0.0", 
    "@angular/platform-browser-dynamic": "2.0.0", 

    "systemjs": "0.19.27", 
    "core-js": "^2.4.1", 
    "reflect-metadata": "^0.1.3", 
    "rxjs": "5.0.0-beta.12", 
    "zone.js": "^0.6.23", 

    "bootstrap": "^3.3.6" 
    }, 
    "devDependencies": { 
    "typescript": "^2.0.2", 
    "typings": "^1.0.4" 
    }, 
    "repository": {} 
} 

index.html

<!DOCTYPE html> 
<html> 
<head> 
    <base href="/"> 
    <title>MyApp</title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 

    <script src="node_modules/core-js/client/shim.min.js"></script> 
    <script src="node_modules/zone.js/dist/zone.js"></script> 
    <script src="node_modules/reflect-metadata/Reflect.js"></script> 
    <script src="node_modules/systemjs/dist/system.src.js"></script> 

    <script src="systemjs.config.js"></script> 
    <script> 
     System.import('app').catch(function(err){ console.error(err); }); 
    </script> 
</head> 

<body> 
<my-app>Loading...</my-app> 
</body> 
</html> 

systemjs.config.js

(function (global) { 
    System.config({ 
    paths: { 
     'npm:': 'node_modules/' 
    }, 
    map: { 
     app: 'app', 

     '@angular/core': 'npm:@angular/core/bundles/core.umd.js', 
     '@angular/common': 'npm:@angular/common/bundles/common.umd.js', 
     '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js', 
     '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js', 
     '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js', 

     'rxjs': 'npm:rxjs', 
    }, 
    packages: { 
     app: { 
     main: './main.js', 
     defaultExtension: 'js' 
     }, 
     rxjs: { 
     defaultExtension: 'js' 
     } 
    } 
    }); 
})(this); 

tsconfig.json

{ 
    "compilerOptions": { 
    "target": "es5", 
    "module": "commonjs", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "removeComments": false, 
    "noImplicitAny": true, 
    "suppressImplicitAnyIndexErrors": true 
    } 
} 

typings.json

{ 
    "globalDependencies": { 
    "core-js": "registry:dt/core-js#0.0.0+20160725163759" 
    } 
} 

app.component.ts

import { Component } from '@angular/core'; 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <h1>{{title}}</h1> 
    `, 
    styleUrls: ['app.component.css'] 
}) 
export class AppComponent{ 
    title = 'Title'; 
} 

app.module.ts

import { NgModule }  from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { AppComponent } from './app.component'; 

@NgModule({ 
    imports: [ 
    BrowserModule 
    ], 
    declarations: [ 
    AppComponent 
    ], 
    bootstrap: [ AppComponent ] 
}) 
export class AppModule {} 

JIT конфигурации main.ts

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 
import { AppModule } from './app.module'; 
platformBrowserDynamic().bootstrapModule(AppModule); 

Следующий шаг - сборник с использованием команды tsc, строительство войны и развертывание.

АОТ конфигурации main.ts

import { platformBrowser } from '@angular/platform-browser'; 
import { AppModuleNgFactory } from './app.module.ngfactory'; 
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory); 

Следующий шаг установка компилятора npm install @angular/compiler-cli, команду компиляции с помощью './ node_modules/.bin/NGC', построение войны и развертывания. После ngc команды я получаю файлы * .ngfactory.ts, * .ngfactory.js, * .metadata.json, * .shim.ts * .shim.js

+0

вы когда-либо получить ответ на этот вопрос? видя то же самое, моя сторона –

+0

Я нашел ответ, почему угловой добавить префикс - это зависит от опции «модуль» в tsconfig.json. Это могут быть «commonjs» или «es2015». В настоящее время я столкнулся с новыми проблемами: «Traceur не найден: ошибка XHR (404 не найдена)». Исследование этой темы получило известную проблему, и это похоже на некоторую проблему в Angular 2. Мы должны ждать новую версию и продолжить исследование темы относительно aot. Прочтите эту тему https: // github.com/angular/angular/issues/11358 возможно, вы найдете что-то новое. – vladbrk

+0

Также после обновления Angular2 от 2.0.0 до 2.1.1 исправлены некоторые критические ошибки. Но 2.1.2 нестабилен, проблемы с [attr] равны нулю – vladbrk

ответ