Chciałem uruchomić prostą aplikację hello world dla Angular.
Gdy wykonałem instrukcje z oficjalnego szybkiego startu, instalacja utworzyła 32 000 plików w moim projekcie.
Uznałem, że to jakaś pomyłka lub coś mi umknęło, więc zdecydowałem się użyć angular-cli , ale po skonfigurowaniu projektu naliczyłem 41 000 plików.
Gdzie popełniłem błąd? Czy brakuje mi czegoś naprawdę naprawdę oczywistego?
javascript
angular
Mosze Szaham
źródło
źródło
Odpowiedzi:
W Twojej konfiguracji nie ma nic złego.
Angular (od wersji 2.0) używa modułów npm i zależności do programowania. To jedyny powód, dla którego widzisz tak ogromną liczbę plików.
Podstawowa konfiguracja Angulara zawiera transpiler, zależności typowania, które są niezbędne tylko do celów programistycznych.
Po zakończeniu programowania musisz jedynie spakować tę aplikację.
Po spakowaniu aplikacji będzie tylko jeden
bundle.js
plik, który możesz następnie wdrożyć na serwerze.„transpiler” to tylko kompilator, dziękuję @omninonsense za dodanie tego.
źródło
Pliki pakietu NPM (programowanie) Pliki świata rzeczywistego (wdrożenie)
*
:bundled with @angular
[ zobacz to dla procesu łączenia ⇗ ]
źródło
-3
podano, że nie zrobili sumy, ale teraz mam :)Nie ma nic złego w twojej konfiguracji programistycznej .
Coś jest nie tak z konfiguracją produkcyjną .
Kiedy tworzysz „Projekt Angular 2” lub „Dowolny projekt oparty na JS”, możesz użyć wszystkich plików, możesz wypróbować wszystkie pliki, możesz zaimportować wszystkie pliki. Ale jeśli chcesz obsłużyć ten projekt, musisz połączyć wszystkie pliki strukturalne i pozbyć się niepotrzebnych plików.
Istnieje wiele opcji łączenia tych plików razem:
źródło
Jak już wspomniano kilka osób: Wszystkie pliki w katalogu node_modules (lokalizacja NPM dla pakietów) są częścią zależności projektu (tzw. Zależności bezpośrednie). Dodatkowo, twoje zależności mogą również mieć swoje własne zależności itp. (Tzw. Zależności przechodnie). Kilka dziesięciu tysięcy plików to nic specjalnego.
Ponieważ możesz przesyłać tylko 10 000 plików (patrz komentarze), wybrałbym silnik pakujący. Ten silnik połączy wszystkie twoje JavaScript, CSS, HTML itp. I utworzy jeden pakiet (lub więcej, jeśli je określisz). Twój index.html załaduje ten pakiet i to wszystko.
Jestem fanem pakietu webpack, więc moje rozwiązanie webpack utworzy pakiet aplikacji i pakiet dostawcy (pełny działający program znajduje się tutaj https://github.com/swaechter/project-collection/tree/master/web-angular2- przykład ):
index.html
webpack.config.js
Zalety:
Niedogodności:
Oświadczenie: Jest to dobre rozwiązanie dla Http 1. *, ponieważ minimalizuje obciążenie ogólne dla każdego żądania HTTP. Masz tylko prośbę o indeks.html i każdy pakiet - ale nie o 100-200 plików. W tej chwili jest to właściwy sposób.
Z drugiej strony Http 2 próbuje zminimalizować narzut HTTP, więc jest oparty na protokole strumieniowym. Strumień ten może komunikować się w obu kierunkach (Klient <--> Serwer), dlatego możliwe jest bardziej inteligentne ładowanie zasobów (ładujesz tylko wymagane pliki). Strumień eliminuje znaczną część narzutu HTTP (mniej podróży w obie strony HTTP).
Ale to tak samo, jak w przypadku IPv6: minie kilka lat, zanim ludzie naprawdę zaczną korzystać z HTTP 2
źródło
angular-cli
które już jest dostarczane z pakietem (ten sam sugerowany pakiet WWW).Musisz upewnić się, że właśnie wdrażasz folder dist (skrót do dystrybucji) z twojego projektu wygenerowanego przez Angular CLI . Pozwala to narzędziu pobrać kod źródłowy i jego zależności i dać ci tylko to, czego potrzebujesz do uruchomienia aplikacji.
Biorąc to pod uwagę, istnieje / był problem z Angular CLI w odniesieniu do kompilacji produkcyjnych poprzez `ng build --prod
Wczoraj (02 sierpnia 2016) to wydanie zostało zrobione który włącza mechanizm zbudowany z brokułami + systemjs do WebPacka które z powodzeniem obsługuje produkcja buduje.
Na podstawie tych kroków:
Widzę
dist
rozmiar folderu 1,1 MB w 14 wymienionych tutaj plikach :Uwaga Obecnie, aby zainstalować wersję kątową cli dla webpacka, musisz uruchomić ...
npm install angular-cli@webpack -g
źródło
Sam Angular ma wiele zależności, a wersja beta CLI pobiera cztery razy więcej plików.
W ten sposób utworzenie prostego projektu spowoduje zmniejszenie liczby plików („tylko” pliki 10K) https://yakovfain.com/2016/05/06/starting-an-angular-2-rc-1-project/
źródło
Wydaje się, że nikt nie wspomniał o Kompilacji Ahead-of-Time, jak opisano tutaj: https://angular.io/docs/ts/latest/cookbook/aot-compiler.html
Dotychczasowe doświadczenia z Angularem 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.
Nakręciłem prosty film, w którym pokazuję rozmiar pobierania, liczbę plików itp. Dla aplikacji Angular w wersji dev vs AoT - którą możesz zobaczyć tutaj:
https://youtu.be/ZoZDCgQwnmQ
Kod źródłowy wersji demo znajdziesz tutaj:
https://github.com/fintechneo/angular2-templates
I - jak powiedzieli wszyscy inni tutaj - nie ma nic złego, gdy w twoim środowisku programistycznym jest wiele plików. Tak właśnie jest ze wszystkimi zależnościami, które występują w Angular i wielu innych współczesnych ramach. Różnica polega jednak na tym, że przy wysyłce do produkcji powinno być możliwe spakowanie jej do kilku plików. Nie chcesz też wszystkich tych plików zależności w repozytorium git.
źródło
W rzeczywistości nie jest to specyficzne dla Angulara, dzieje się tak w prawie każdym projekcie, który wykorzystuje ekosystem NodeJs / npm do swoich narzędzi.
Te projekty znajdują się w folderach node_modules i są zależnościami przejściowymi, które muszą być uruchomione przez bezpośrednie zależności.
W ekosystemie węzłów moduły są zwykle małe, co oznacza, że zamiast sami opracowywać rzeczy, zwykle importujemy większość tego, czego potrzebujemy, w postaci modułu. Może to obejmować tak małe rzeczy, jak słynna funkcja lewego klawisza, po co pisać to sami, jeśli nie jako ćwiczenie?
Dlatego posiadanie dużej liczby plików jest dobrą rzeczą, oznacza to, że wszystko jest bardzo modułowe, a autorzy modułów często używali innych modułów. Ta łatwość modułowości jest prawdopodobnie jednym z głównych powodów, dla których ekosystem węzłów rozwijał się tak szybko.
Zasadniczo nie powinno to powodować żadnych problemów, ale wydaje się, że napotykasz limit liczby plików silnika aplikacji Google. W takim przypadku sugeruję, aby nie przesyłać node_modules do silnika aplikacji.
zamiast tego skompiluj aplikację lokalnie i prześlij do silnika aplikacji Google tylko dołączone pliki, ale nie do samego silnika aplikacji.
źródło
Jeśli używasz nowszej wersji angular cli, użyj
ng build --prod
Stworzy folder dist, który ma mniej plików, a prędkość projektu wzrośnie.
Również do testowania lokalnego z najlepszą wydajnością kątowego cli, którego możesz użyć
ng serve --prod
źródło
jeśli używasz Angular CLI, zawsze możesz użyć --minimal flagi podczas tworzenia projektu
Właśnie uruchomiłem go z flagą i tworzy 24 600 plików i
ng build --prod
tworzy folder dist 212 KBJeśli więc nie potrzebujesz fontann na wodę w swoim projekcie lub po prostu chcesz szybko coś przetestować, myślę, że jest to bardzo przydatne
źródło
Tworzenie nowego projektu z kątowym cli ostatnio i folderem node_modules miał 270 mb, więc tak, jest to normalne, ale jestem pewien, że większość nowych programistów świata kątowego kwestionuje to i jest prawidłowe. W przypadku prostego nowego projektu sensowne może być nieco obniżenie zależności;) Niewiedza o tym, od czego zależą wszystkie pakiety, może być nieco denerwująca, szczególnie dla nowych deweloperów wypróbowujących cli po raz pierwszy. Dodaj do tego, że większość podstawowych samouczków nie omawia ustawień wdrażania, aby wyeksportowane pliki były potrzebne. Nie wierzę, że nawet samouczek oferowany na kanciastej oficjalnej stronie internetowej mówi o tym, jak wdrożyć prosty projekt.
źródło
Oto porównanie tego, co zajmuje więcej miejsca w projektach kątowych.
źródło
Jeśli twój system plików obsługuje dowiązania symboliczne, możesz przynajmniej przenieść wszystkie te pliki do ukrytego folderu - aby inteligentne narzędzie
tree
nie wyświetlało ich domyślnie.Użycie do tego ukrytego folderu może również zachęcić do zrozumienia, że są to pliki pośrednie związane z kompilacją, które nie muszą być zapisywane w celu kontroli wersji - lub używane bezpośrednio we wdrożeniu.
źródło
Nie ma w tym niczego złego. Są to wszystkie zależności węzłów wspomniane w pliku package.json.
Zachowaj ostrożność, jeśli pobrałeś część projektu git hub, może mieć wiele innych zależności, które nie są tak naprawdę wymagane dla aplikacji Angular 2 First Hello World :)
źródło