Na angular.io znajduje się samouczek szybkiego startu, który używa maszynopisu i systemjs. Skoro mam już uruchomioną miniaplikację, jak powinienem zająć się tworzeniem czegoś do wdrożenia? Nie mogłem znaleźć żadnych informacji na ten temat.
Czy potrzebuję dodatkowych narzędzi, dodatkowych ustawień w System.config?
(Wiem, że mógłbym użyć webpacka i utworzyć pojedynczy plik bundle.js, ale chciałbym użyć systemjs, ponieważ jest używany w samouczku)
Czy ktoś mógłby udostępnić proces kompilacji w tej konfiguracji (Angular 2, TypeScript, systemjs)
typescript
angular
systemjs
Brian G. Bell
źródło
źródło
Odpowiedzi:
Kluczową rzeczą do zrozumienia na tym poziomie jest to, że używając następującej konfiguracji, nie można bezpośrednio łączyć skompilowanych plików JS.
W konfiguracji kompilatora TypeScript:
W HTML
W rzeczywistości te pliki JS będą zawierać anonimowe moduły. Moduł anonimowy to plik JS, który używa
System.register
nazwy modułu jako pierwszego parametru, ale bez nazwy. To jest to, co kompilator TypeScript generuje domyślnie, gdy systemjs jest skonfigurowany jako menedżer modułów.Aby mieć wszystkie swoje moduły w jednym pliku JS, musisz wykorzystać rozszerzenie
outFile
właściwość w konfiguracji kompilatora TypeScript.Aby to zrobić, możesz użyć następującego wewnętrznego łyku:
Można to połączyć z innym przetwarzaniem:
app.js
plikvendor.js
plik dla bibliotek innych firmboot.js
plik w celu zaimportowania modułu ładującego aplikację. Ten plik musi znajdować się na końcu strony (gdy cała strona jest załadowana).index.html
aby uwzględnić te dwa plikiW zadaniach łykowych używane są następujące zależności:
Poniżej znajduje się próbka, która może zostać dostosowana.
Utwórz
app.min.js
plikUtwórz
vendors.min.js
plikUtwórz
boot.min.js
plikconfig.prod.js
Prostu zawiera następujące elementy:Zaktualizuj
index.html
plikDo
index.html
wygląda następująco:Zwróć uwagę, że
System.import('boot');
należy wykonać na końcu treści, aby poczekać na zarejestrowanie wszystkich składników aplikacji z plikuapp.min.js
pliku.Nie opisuję tutaj sposobu obsługi minifikacji CSS i HTML.
źródło
Możesz użyć polecenia kompilacji angular2-cli
https://github.com/angular/angular-cli/wiki/build#bundling
Aktualizacja
Ta odpowiedź została przesłana, gdy angular2 był w rc4
Wypróbowałem to ponownie na angular-cli beta21 i angular2 ^ 2.1.0 i działa zgodnie z oczekiwaniami
Ta odpowiedź wymaga zainicjowania aplikacji za pomocą angular-cli, którego możesz użyć
Lub na już istniejącym
Aktualizacja 08.06.2018
W przypadku kątowej 6 składnia jest inna.
Sprawdź dokumentację
źródło
Możesz zbudować projekt Angular 2 (2.0.0-rc.1) w Typescript używając SystemJS with Gulp i SystemJS-Builder .
Poniżej znajduje się uproszczona wersja tego, jak budować, pakować i minimalizować Tour of Heroes w wersji 2.0.0-rc.1 ( pełne źródło , przykład na żywo ).
gulpfile.js
system.config.js
źródło
gulp <taskname>
gdzie „nazwa_zadania” jest nazwą zadania, które wywołuje program budujący SystemJS, w moim powyższym przykładzie tak jestbundle:app
. W tym zadaniu Gulp możesz użyć modułu npm „systemjs-builder”, aby określić konfigurację systemu i plik wyjściowy.Oto mój boilerplate MEA2N dla Angular 2: https://github.com/simonxca/mean2-boilerplate
To prosty szablon, który służy
tsc
do łączenia rzeczy. (Właściwie używa grunt-ts , co wtsc
gruncie rzeczy jest tylko poleceniem). Nie jest potrzebny Wekpack itp.Niezależnie od tego, czy używasz pomruku, czy nie, idea jest taka:
ts/
(przykład:public/ts/
:)tsc
aby odzwierciedlić strukturę katalogów twojegots/
folderu wjs/
folderze i po prostu odwołać się do plików wjs/
folderze w twoimindex.html
.Aby uruchomić grunt-ts (powinno być równoważne polecenie dla zwykłego tsc, Gulp itp.), Masz właściwość w
tsconfig.json
wywołaniu"outDir": "../js"
i odwołujesz się do niej wgruntfile.js
:Następnie uruchom
grunt ts
, co przeniesie twoją aplikacjępublic/ts/
i dubluje jąpublic/js/
.Tam. Bardzo łatwe do zrozumienia. Nie jest to najlepsze podejście, ale na początek dobre.
źródło
Najłatwiejszym sposobem, w jaki znalazłem połączenie kątowego rc1 dla systemJs, jest użycie
gulp
isystemjs-builder
:Jak wskazano w komentarzach, systemJs ma obecnie problemy z pakowaniem komponentów przy użyciu
moduleId: module.id
https://github.com/angular/angular/issues/6131
Wydaje się, że obecne zalecenie (kąt 2 rc1) zakłada użycie jawnych ścieżek, tj
moduleId: '/app/path/'
źródło
@Component
dekoratorze.bundle.js
próbuje rozwiązać ścieżki jako bezwzględne, mimo że są względne, powodując błędy 404 (patrz stackoverflow.com/questions/37497635/… ). Jak sobie z tym poradziłeś?moduleId
się na ścieżkę względną?moduleId: module.id
w@Component
templateUrl
i jest sprzeczne z celem posiadaniamoduleId
na pierwszym miejscu. Próbuję używać ścieżek względnych zgodnie z zaleceniami ( angular.io/docs/ts/latest/cookbook/… )moduleId: '/app/components/home/'
Użyłem expressjs na zapleczu do obsługi mojego projektu ng2. Możesz to sprawdzić na mojej stronie github: https://github.com/echonax/ng2-beta-and-test-framework
źródło
W witrynie Angular.io, w sekcji Zaawansowane / Wdrażanie, zaleca się, aby najprostszym sposobem wdrożenia było „skopiowanie środowiska programistycznego na serwer”.
przejdź przez sekcję pod: Najprostsze możliwe wdrożenie. Ostateczne pliki projektu są wyświetlane w sekcji kodu. Zauważ, że już skonfigurował kod do ładowania plików pakietów npm z sieci WWW (zamiast z lokalnego folderu npm_modules).
upewnij się, że jest uruchomiony na komputerze lokalnym (npm start). Następnie w folderze projektu skopiuj wszystko z podfolderu „/ src” do skonfigurowanego wiadra S3. Możesz użyć przeciągania i upuszczania do kopiowania, podczas tego procesu masz możliwość wyboru ustawienia uprawnień dla plików, upewnij się, że są one „czytelne” dla „wszystkich”.
na karcie „Właściwości” zasobnika poszukaj panelu „Statyczny hosting witryny”, zaznacz opcję „Użyj tego zasobnika do hostowania witryny” i określ „index.html” zarówno w dokumencie Indeks, jak i w dokumencie błędu.
kliknij statyczną stronę internetową Endpoint, twój projekt będzie działał!
źródło