Jaka jest najlepsza metoda łączenia Angulara (wersja 2, 4, 6, ...) do produkcji na serwerze sieciowym na żywo.
Dołącz odpowiedź Angular do odpowiedzi, abyśmy mogli lepiej śledzić zmiany w późniejszych wersjach.
angular
webpack
systemjs
angular-cli
Pat M.
źródło
źródło
Odpowiedzi:
2.x, 4.x, 5.x, 6.x, 7.x, 8.x, 9.x
(TypeScript) z Angular CLIKonfiguracja OneTime
npm install -g @angular/cli
ng new projectFolder
tworzy nową aplikacjęKrok wiązania
ng build --prod
(uruchom w wierszu poleceń, gdy katalog jestprojectFolder
)prod
pakiet flag dla produkcji (patrz dokumentacja kątowa, aby uzyskać listę opcji dołączonych do flagi produkcji).Kompresuj za pomocą kompresji Brotli zasobów za pomocą następującego polecenia
for i in dist/*; do brotli $i; done
pakiety są generowane domyślnie do projectFolder / dist (/ $ projectFolder dla 6)
Wynik
Rozmiary z Angular
9.0.0
z CLI9.0.1
i opcją CSS bez Angular routingudist/main-[es-version].[hash].js
Twoja aplikacja w pakiecie [rozmiar ES5: 158 KB dla nowej aplikacji Angular CLI pusty, 40 KB skompresowany].dist/polyfill-[es-version].[hash].bundle.js
Zależności wielopełnienia (@ prostokątne, RxJS ...) w pakiecie [rozmiar ES5: 127 KB dla nowej aplikacji Angular CLI pusty, 37 KB skompresowany].dist/index.html
punkt wejścia Twojej aplikacji.dist/runtime-[es-version].[hash].bundle.js
moduł ładującydist/style.[hash].bundle.css
definicje styludist/assets
zasoby skopiowane z konfiguracji zasobów Angular CLIRozlokowanie
Podgląd aplikacji można uzyskać za pomocą
ng serve --prod
polecenia uruchamiającego lokalny serwer HTTP, dzięki czemu aplikacja z plikami produkcyjnymi jest dostępna za pomocą http: // localhost: 4200 .W przypadku zastosowania produkcyjnego musisz wdrożyć wszystkie pliki z
dist
folderu na wybranym serwerze HTTP.źródło
2.0.1 Final
using Gulp (TypeScript - Target: ES5)Konfiguracja OneTime
npm install
(uruchom w cmd, gdy katalog jest folderem projektu)Pakowanie kroków
npm run bundle
(uruchom w cmd, gdy katalog jest folderem projektu)pakiety są generowane w folderze projektu / pakiety /
Wynik
bundles/dependencies.bundle.js
[ rozmiar: ~ 1 MB (tak mały, jak to możliwe)]bundles/app.bundle.js
[ rozmiar: zależy od twojego projektu , mój wynosi ~ 0,5 MB ]Struktura pliku
dist-systemjs.config.js
znacznika po znacznikach pakietu nadal pozwoli na uruchomienie programu, ale pakiet zależności zostanie zignorowany, a zależności zostaną załadowane znode_modules
folderu.Najlepsze, co mogłem zrobić :)
źródło
inline-templates
uruchomieniu wstawia szablony, a następnie tworzy kopię wszystkich folderów i plików aplikacji w folderzedist/app
. Następnie wdist-systemjs.config.js
odwzorowaćapp
nadist/app
który to folder, który nie istnieje w przypadku korzystania zdist
folderu jako root. Czy nie chcesz uruchomić aplikacji zdist
folderu? W takim przypadkudist
folder nie byłby zagnieżdżony wdist
folderze głównym . Muszę tu coś przegapić. Czy nie musisz informować systemjs, aby używał twoich plików w pakiecie, a nie zwykłych plików znalezionych wdist/app
folderze?Angular 2 z pakietem Webpack (bez konfiguracji CLI)
1- Samouczek zespołu Angular2
Zespół Angular2 opublikował samouczek dotyczący korzystania z pakietu Webpack
Pliki z samouczka utworzyłem i umieściłem w małym projekcie początkowym GitHub . Możesz więc szybko wypróbować przepływ pracy.
Instrukcje :
instalacja npm
npm start . Dla rozwoju. Spowoduje to utworzenie wirtualnego folderu „dist”, który zostanie ponownie załadowany na Twój adres localhost.
kompilacja npm run . Do produkcji „Spowoduje to utworzenie fizycznej wersji folderu„ dist ”, która może zostać wysłana do serwera WWW. Folder dist ma 7,8 MB, ale tylko 234 KB jest wymagane do załadowania strony w przeglądarce internetowej.
2 - Zestaw startowy Webkit
Ten zestaw startowy Webpack oferuje więcej funkcji testowych niż powyższy samouczek i wydaje się dość popularny.
źródło
Angular 2 workflow produkcji z konstruktorem i łykiem SystemJs
Angular.io ma samouczek szybkiego startu. Skopiowałem ten samouczek i rozszerzyłem o kilka prostych zadań typu gulp, aby spakować wszystko do folderu dist, który można skopiować na serwer i tak po prostu pracować. Próbowałem zoptymalizować wszystko, aby działało dobrze w Jenkis CI, aby moduły node_modu mogły być buforowane i nie trzeba ich kopiować.
Kod źródłowy z przykładową aplikacją na Github: https://github.com/Anjmao/angular2-production-workflow
Kroki do produkcjiWęzeł : Chociaż zawsze możesz utworzyć własny proces kompilacji, ale bardzo polecam użycie angular-cli, ponieważ ma on wszystkie potrzebne przepływy pracy i działa teraz idealnie. Używamy go już w produkcji i nie mamy żadnych problemów z angular-cli.
źródło
Angular CLI 1.xx (Działa z Angular 4.xx, 5.xx)
Obsługuje to:
Początkowe ustawienia
Możesz dodać
--style=scss
obsługę SASS .scss.Możesz dodać
--ng4
do korzystania z Angular 4 zamiast Angular 2.Po utworzeniu projektu interfejs CLI uruchomi się automatycznie
npm install
. Jeśli zamiast tego chcesz użyć Przędzy lub po prostu chcesz zobaczyć szkielet projektu bez instalacji, sprawdź, jak to zrobić tutaj .Pakiet kroków
W folderze projektu:
W bieżącej wersji musisz określić--aot
ręcznie, ponieważ można jej używać w trybie programowania (chociaż nie jest to praktyczne ze względu na powolność).To również wykonuje kompilację AoT dla jeszcze mniejszych pakietów (bez kompilatora Angular, zamiast tego wygenerowano dane wyjściowe kompilatora). Pakiety są znacznie mniejsze z AoT, jeśli używasz Angular 4, ponieważ generowany kod jest mniejszy.
Możesz przetestować swoją aplikację za pomocą AoT w trybie programowania (sourcemaps, bez minimalizacji) i AoT, uruchamiając
ng build --aot
.Wynik
Domyślnym katalogiem wyjściowym jest
./dist
, choć można go zmienić./angular-cli.json
.Pliki do wdrożenia
Wynik kroku kompilacji jest następujący:
(Uwaga:
<content-hash>
odnosi się do skrótu / odcisku palca zawartości pliku, który ma być sposobem na pomijanie pamięci podręcznej, jest to możliwe, ponieważ Webpack zapisujescript
tagi samodzielnie)./dist/assets
Pliki skopiowane w stanie, w jakim się znajdują
./src/assets/**
./dist/index.html
Od
./src/index.html
, po dodaniu do niego skryptów webpack,plik szablonu źródłowego można skonfigurować w
./angular-cli.json
./dist/inline.js
Mały moduł ładujący / pakiet wypełniający
./dist/main.<content-hash>.bundle.js
Główny plik .js zawierający wszystkie wygenerowane / importowane skrypty .js
./dist/styles.<content-hash>.bundle.js
Gdy używasz modułów ładujących Webpack dla CSS, co jest sposobem CLI, są one ładowane tutaj przez JS
W starszych wersjach utworzono także wersje spakowane gzip do sprawdzania ich rozmiaru oraz
.map
plików sourcemaps, ale nie dzieje się tak, ponieważ ludzie wciąż proszą o ich usunięcie.Inne pliki
W niektórych innych przypadkach możesz znaleźć inne niechciane pliki / foldery:
./out-tsc/
Z
./src/tsconfig.json
„soutDir
./out-tsc-e2e/
Z
./e2e/tsconfig.json
„soutDir
./dist/ngfactory/
Z kompilatora AoT (nie można go konfigurować bez tworzenia interfejsu CLI od wersji beta 16)
źródło
<content-hash>
z pakietów w prod. może to powodować problemy z uzyskaniem najnowszego pakietu?Na dzień dzisiejszy nadal uważam książkę kucharską z kompilacją Ahead-of-Time za najlepszy przepis na pakiet produkcyjny. Można go znaleźć tutaj: https://angular.io/docs/ts/latest/cookbook/aot-compiler.html
Moje dotychczasowe doświadczenia z Angularem 2 polegają na tym, że AoT tworzy najmniejsze kompilacje bez prawie żadnego czasu ładowania. I najważniejsze, ponieważ chodzi o pytanie - wystarczy wysłać tylko kilka plików do produkcji.
Wydaje się, że dzieje się tak, ponieważ kompilator Angular nie zostanie dostarczony z kompilacjami produkcyjnymi, ponieważ szablony są kompilowane „przed czasem”. Fajnie jest też widzieć znaczniki szablonów HTML przekształcone w instrukcje javascript, których odtworzenie w oryginalnym HTML byłoby bardzo trudne.
Zrobiłem prosty film, w którym pokazuję rozmiar pobierania, liczbę plików itp. Dla aplikacji Angular 2 w wersji dev vs AoT - którą możesz zobaczyć tutaj:
https://youtu.be/ZoZDCgQwnmQ
Tutaj znajdziesz kod źródłowy użyty w filmie:
https://github.com/fintechneo/angular2-templates
źródło
źródło
Możesz wdrożyć aplikację kątową przy
github
użyciu angular-cli-ghpagessprawdź link, aby dowiedzieć się, jak wdrożyć przy użyciu tego CLI.
wdrożona strona internetowa będzie przechowywana w jakimś oddziale w
github
zazwyczajstrony gh
use może sklonować gałąź git i używać jej jak statycznej witryny na serwerze
źródło
„Najlepsze” zależy od scenariusza. Są chwile, kiedy zależy Ci tylko na najmniejszym możliwym pojedynczym pakiecie, ale w dużych aplikacjach możesz rozważyć leniwe ładowanie. W pewnym momencie niepraktyczne jest obsługiwanie całej aplikacji jako jednego pakietu.
W tym drugim przypadku Webpack jest ogólnie najlepszym sposobem, ponieważ obsługuje dzielenie kodu.
W przypadku pojedynczego pakietu rozważyłbym Rollup lub kompilator Closure, jeśli czujesz się odważny :-)
Stworzyłem próbki wszystkich Anglerów, z których kiedykolwiek tu korzystałem: http://www.syntaxsuccess.com/viewarticle/angular-production-builds
Kod można znaleźć tutaj: https://github.com/thelgevold/angular-2-samples
Wersja kątowa: 4.1.x
źródło
Wystarczy skonfigurować Angular 4 z pakietem WebPack 3 w ciągu minuty Twój pakiet rozwojowy i produkcyjny ENV będzie gotowy bez żadnych problemów, postępuj zgodnie z poniższym dokumentem github
https://github.com/roshan3133/angular2-webpack-starter
źródło
Spróbuj poniżej komendy CLI w bieżącym katalogu projektu. Stworzy pakiet folderów dist. dzięki czemu możesz przesłać wszystkie pliki w folderze dist do wdrożeń.
ng build --prod --aot --base-href.
źródło
ng serwuje prace służące do obsługi naszej aplikacji w celach programistycznych. A co z produkcją? Jeśli spojrzymy na nasz plik package.json, możemy zobaczyć, że istnieją skrypty, których możemy użyć:
Skrypt kompilacji używa kompilacji ng Angular CLI z flagą --prod. Spróbujmy teraz. Możemy to zrobić na dwa sposoby:
# za pomocą skryptów npm
# przy użyciu cli bezpośrednio
Tym razem otrzymujemy cztery pliki zamiast pięciu. Flaga --prod mówi firmie Angular, aby nasza aplikacja była znacznie mniejsza.
źródło