2016-09-02 26 views
5

Właśnie zaktualizowałem swój projekt do Angular 2 RC 6. Obecnie próbuję używać kompilacji Ahead (AoT), jak wspomniano w poście na blogu http://angularjs.blogspot.com/, ale bez powodzenia.Angular 2 RC 6 Kompilator AoT nie działa

Nie używam kątowego cli jako projektu budowlanego w ASP.Net.

Jak blogu sugeruje, mam zainstalowane @ kątowej/kompilatora-cli

Ale gdy próbuję uruchomić NGC od wierszu polecenia to daje błąd

'ngc' is not recognized as an internal or external command, 
operable program or batch file. 


npm run ngc 
npm ERR! Windows_NT 10.0.10586 
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "ngc" 
npm ERR! node v6.4.0 
npm ERR! npm v3.10.3 

npm ERR! missing script: ngc 
npm ERR! 
npm ERR! If you need help, you may report this error at: 
npm ERR!  <https://github.com/npm/npm/issues> 

npm ERR! Please include the following file with any support request: 
npm ERR!  D:\Project\App\npm-debug.log 

Może ktoś proszę przewodnik jak używać Kompilator AoT z projektem ASP.Net. Lub gdy nie używasz Angular CLI, ale budujesz komponenty itp. Ręcznie.

Edit

I teraz udało się uruchomić NGC najpierw przeniósł się do ./node_modules/.bin/ a następnie uruchomiony

ngc -p D:\Project\App 

Ale teraz kompilator jest rzucanie poniższy błąd:

Kiedy próbuję skompilować mój projekt z ngc, powoduje to błąd poniżej:

Error: Error encountered resolving symbol values statically. Function calls are not supported. Consider replacing the function or lambda with a reference to an exported function (position 92:25 in the original .ts file), resolving symbol AppModule in 

W moim module aplikacji mam poniższych dostawców i prawdopodobnie powoduje to projekt. Nie jestem pewien, co dokładnie jest z tym nie tak?

providers: [ 
     GlobalService, 
     { 
      provide: Http, 
      useFactory: (backend: XHRBackend, defaultOptions: RequestOptions, globalService: GlobalService) => new HttpLoading(backend, defaultOptions, globalService), 
      deps: [XHRBackend, RequestOptions, GlobalService] 
     } 
    ], 
+0

Ewentualny duplikat [ng nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne] (http://stackoverflow.com/questions/37991556/ng-is-not-recognized-as-an-internal-or-external-command) –

+0

Jeśli spojrzeć na odpowiedź, jest to problem z systemem Windows, w jakiś sposób Twoja PATH mogła zostać zgnieciona, lub musisz ponownie uruchomić, lub nawet otworzyć CMD jako administrator. Może to być niestety wiele rzeczy. Daj im szansę! –

+0

Dziękuję Mark za odpowiedź, czy możesz rzucić okiem na Edycję, którą zrobiłem na to pytanie? –

Odpowiedz

0

Problem 1

Podczas uruchamiania skryptów package.json lub "skrypty NPM", aby naprawić problem z ścieżką w systemie Windows 10, należy zawinąć ścieżkę katalogu w podwójne cudzysłowy i uciec każdą podwójną ofertę z odwrotnym ukośnikiem:

"compile:aot": \"./node_modules/.bin/ngc\" -p src

byłoby to wykonać program ngc zlokalizowany w ./node_modules/.bin z -p src argumentów.

W przeciwnym razie musisz wykonać cd ./node_modules/.bin && ngc -p src jako 2 różne polecenia.

Problem 2

Obecnie wydaje się, że kompilacja AOT dla kątowego 2 ma problem z require() wypowiedzi. Więc jeśli chcesz wyeliminować błędy kompilacji, musisz usunąć wszystkie instrukcje require() ze swojej aplikacji.

Oczywiście, jest to zły pomysł, ponieważ istnieje wartość wymagać(), szczególnie podczas pracy z Webpack lub innych modułów bundlers. Musimy poczekać na rozwiązanie od zespołu angular2.

+0

Hi @TetraDev, re. problem 2, czy jakieś dodatkowe źródło informacji dla tego problemu AOT VS 'require()'? Nie mogłem znaleźć żadnego, ale trafiam w to, gdy próbuję wymagać "globalnego" pliku CSS i robić kompilację AOT w produkcji. Dzięki – superjos

+0

@Superjos Tak, zamiast 'require ('my.css'),' po prostu wykonaj 'import 'my.css';' i AOT skompiluje dobrze. – TetraDev

+0

Dzięki za odpowiedź. Zapomniałem o moim pytaniu. W pewnym momencie przyjęliśmy takie samo obejście jak ty. Później, aktualizując zależności do obecnie dostępnego, odkryłem, że 'require()' działa ponownie. Spróbuj z zależnościami @angular 2.1.0, a jeśli nie za bardzo, również z pakietem internetowym 2.1.0-beta.25 – superjos

0

biegałam do tej kwestii przy użyciu

"@angular/compiler-cli": "^4.0.1" 

Dla mnie usuwanie/node_modules/@ kątową folder i działa

npm install 

Wydawało się rozwiązać mój problem. Moja kopia pakietu musiała zostać zgrabiona.

0

Prawdopodobnie jest to, że masz funkcje w swoich definicjach @NgModule. Muszę usunąć niektórych dynamicznych dostawców, aby działało to dla mnie.

Może powinieneś spróbować zastąpić "useFactory: (...) => {...}" lub przynajmniej przetestuj go komentując.

+0

Domyślam się, że funkcje w definicjach modułów są w czasie wykonywania, więc AOT na pewno się nie powiedzie. – AiShiguang

Powiązane problemy