Je voulais lancer une simple application Hello World pour Angular.
Lorsque j'ai suivi les instructions du démarrage rapide officiel, l'installation a créé 32 000 fichiers dans mon projet.
J'ai pensé que c'était une erreur ou j'ai raté quelque chose, alors j'ai décidé d'utiliser angular-cli , mais après avoir mis en place le projet, j'ai compté 41 000 fichiers.
Où me suis-je trompé? Suis-je en train de manquer quelque chose de vraiment très évident?
javascript
angular
Moshe Shaham
la source
la source
Réponses:
Il n'y a rien de mal avec votre configuration.
Angular (depuis la version 2.0) utilise des modules npm et des dépendances pour le développement. C'est la seule raison pour laquelle vous voyez un si grand nombre de fichiers.
Une configuration de base d'Angular contient des dépendances de transpilateur et de typage qui sont essentielles uniquement pour le développement.
Une fois le développement terminé, il vous suffit de regrouper cette application.
Après avoir regroupé votre application, il n'y aura qu'un seul
bundle.js
fichier que vous pourrez ensuite déployer sur votre serveur.'transpiler' n'est qu'un compilateur, merci @omninonsense pour l'avoir ajouté.
la source
Fichiers de package NPM (développement) Fichiers du monde réel (déploiement)
*
:bundled with @angular
[ voir ceci pour le processus de regroupement ⇗ ]
la source
-3
qu'on m'a donné pour ne pas avoir fait la somme, mais maintenant je l'ai :)Il n'y a rien de mal avec votre configuration de développement .
Quelque chose ne va pas avec votre configuration de production .
Lorsque vous développez un "projet Angular 2" ou "tout projet basé sur JS", vous pouvez utiliser tous les fichiers, vous pouvez essayer tous les fichiers, vous pouvez importer tous les fichiers. Mais si vous voulez servir ce projet, vous devez COMBINER tous les fichiers structurés et vous débarrasser des fichiers inutiles.
Il existe de nombreuses options pour combiner ces fichiers ensemble:
la source
Comme plusieurs personnes l'ont déjà mentionné: Tous les fichiers de votre répertoire node_modules (emplacement NPM pour les packages) font partie des dépendances de votre projet (soi-disant dépendances directes). En plus de cela, vos dépendances peuvent également avoir leurs propres dépendances et ainsi de suite, etc. (soi-disant dépendances transitives). Plusieurs dizaines de milliers de fichiers n'ont rien de spécial.
Parce que vous n'êtes autorisé à télécharger que 10'000 fichiers (voir commentaires), j'irais avec un moteur de bundler. Ce moteur regroupera tous vos JavaScript, CSS, HTML, etc. et créera un seul bundle (ou plus si vous les spécifiez). Votre index.html chargera ce bundle et c'est tout.
Je suis un fan de webpack, donc ma solution de webpack créera un bundle d'applications et un bundle de fournisseur (pour l'application complète, voir ici https://github.com/swaechter/project-collection/tree/master/web-angular2- exemple ):
index.html
webpack.config.js
Avantages:
Désavantages:
Avertissement: il s'agit d'une bonne solution pour Http 1. *, car elle minimise les frais généraux pour chaque demande Http. Vous avez seulement une demande pour votre index.html et chaque bundle - mais pas pour 100 à 200 fichiers. Pour le moment, c'est la voie à suivre.
Http 2, d'autre part, essaie de minimiser la surcharge Http, il est donc basé sur un protocole de flux. Ce flux est capable de communiquer dans les deux sens (Client <--> Serveur) et pour cette raison, un chargement de ressources plus intelligent est possible (Vous ne chargez que les fichiers requis). Le flux élimine une grande partie de la surcharge Http (moins d'allers-retours Http).
Mais c'est la même chose qu'avec IPv6: il faudra quelques années pour que les gens utilisent vraiment Http 2
la source
angular-cli
qui est déjà fournie avec un bundler (le même webpack suggéré).Vous devez vous assurer que vous déployez simplement le dossier dist (abréviation de distribuable) à partir de votre projet généré par la CLI angulaire . Cela permet à l'outil de prendre votre code source et ses dépendances et de ne vous donner que ce dont vous avez besoin pour exécuter votre application.
Cela étant dit, il y a / était un problème avec la CLI angulaire en ce qui concerne les builds de production via `ng build --prod
Hier (2 août 2016), une version a été publiée, qui a fait passer le mécanisme de génération de broccoli + systemjs à webpack qui gère avec succès les versions de production.
Sur la base de ces étapes:
Je vois une
dist
taille de dossier de 1,1 Mo sur les 14 fichiers répertoriés ici:Remarque Actuellement, pour installer la version webpack du cli angulaire, vous devez exécuter ...
npm install angular-cli@webpack -g
la source
Angular lui-même a beaucoup de dépendances, et la version bêta de CLI télécharge quatre fois plus de fichiers.
Voici comment créer un projet simple avec moins de fichiers ("seulement" des fichiers 10K) https://yakovfain.com/2016/05/06/starting-an-angular-2-rc-1-project/
la source
Il semble que personne n'ait mentionné la compilation anticipée comme décrit ici: https://angular.io/docs/ts/latest/cookbook/aot-compiler.html
Mon expérience avec Angular jusqu'à présent est que l'AoT crée les plus petites versions avec presque aucun temps de chargement. Et le plus important, car la question est ici - vous n'avez besoin d'envoyer que quelques fichiers en production.
Cela semble être dû au fait que le compilateur Angular ne sera pas livré avec les versions de production car les modèles sont compilés "Ahead of Time". Il est également très cool de voir votre balisage de modèle HTML transformé en instructions javascript qui seraient très difficiles à inverser dans le code HTML d'origine.
J'ai fait une vidéo simple où je démontre la taille du téléchargement, le nombre de fichiers, etc. pour une application Angular dans la version dev vs AoT - que vous pouvez voir ici:
https://youtu.be/ZoZDCgQwnmQ
Vous trouverez le code source de la démo ici:
https://github.com/fintechneo/angular2-templates
Et - comme tous les autres l'ont dit ici - il n'y a rien de mal quand il y a beaucoup de fichiers dans votre environnement de développement. C'est comme ça avec toutes les dépendances qui viennent avec Angular, et beaucoup d'autres frameworks modernes. Mais la différence ici est que lors de l'expédition vers la production, vous devriez être en mesure de l'intégrer dans quelques fichiers. De plus, vous ne voulez pas que tous ces fichiers de dépendance soient dans votre référentiel git.
la source
Ce n'est en fait pas spécifique à Angular, cela arrive avec presque tous les projets qui utilisent l'écosystème NodeJs / npm pour son outillage.
Ces projets se trouvent dans vos dossiers node_modules et sont les dépendances transitoires dont vos dépendances directes ont besoin pour s'exécuter.
Dans l'écosystème des nœuds, les modules sont généralement petits, ce qui signifie qu'au lieu de développer nous-mêmes les choses, nous avons tendance à importer la plupart de ce dont nous avons besoin sous la forme d'un module. Cela peut inclure de si petites choses comme la fameuse fonction du pavé gauche, pourquoi l'écrire nous-mêmes si ce n'est pas comme un exercice?
Donc, avoir beaucoup de fichiers est une bonne chose, cela signifie que tout est très modulaire et les auteurs de modules ont fréquemment réutilisé d'autres modules. Cette facilité de modularité est probablement l'une des principales raisons pour lesquelles l'écosystème de nœuds s'est développé si rapidement.
En principe, cela ne devrait pas poser de problème, mais il semble que vous rencontriez une limite de nombre de fichiers du moteur d'application Google. Dans ce cas, je suggère de ne pas télécharger node_modules vers le moteur d'application.
au lieu de cela, créez l'application localement et téléchargez dans le moteur d'application Google uniquement les fichiers fournis, mais pas dans le moteur d'application intégré lui-même.
la source
Si vous utilisez la version la plus récente de angular cli, utilisez
ng build --prod
Il créera un dossier dist qui aura moins de fichiers et la vitesse du projet augmentera.
Aussi pour tester en local avec les meilleures performances de cli angulaire que vous pouvez utiliser
ng serve --prod
la source
si vous utilisez la CLI angulaire, vous pouvez toujours utiliser l'indicateur --minimal lorsque vous créez un projet
Je viens de l'exécuter avec le drapeau et il crée 24 600 fichiers et
ng build --prod
produit un dossier dist de 212 KoDonc, si vous n'avez pas besoin de fontaines d'eau dans votre projet ou si vous voulez simplement tester rapidement quelque chose, je pense que c'est assez utile
la source
La création d'un nouveau projet avec angular cli récemment et le dossier node_modules était de 270 Mo, donc oui, c'est normal mais je suis sûr que la plupart des nouveaux développeurs du monde angulaire remettent cela en question et sont valides. Pour un nouveau projet simple, il serait judicieux de réduire les dépendances, peut-être un peu;) Ne pas savoir de quoi dépendent tous les packages peut être un peu énervant, en particulier pour les nouveaux développeurs essayant le cli pour la première fois. Ajoutez au fait que la plupart des didacticiels de base ne traitent pas des paramètres de déploiement pour obtenir les fichiers exportés uniquement nécessaires. Je ne crois pas que même le tutoriel proposé sur le site officiel angulaire parle de la façon de déployer le projet simple.
la source
Voici une comparaison de ce qui prend plus de place dans les projets angulaires.
la source
Si votre système de fichiers prend en charge les liens symboliques, vous pouvez au moins reléguer tous ces fichiers dans un dossier caché - de sorte qu'un outil intelligent comme
tree
ne les affiche pas par défaut.L'utilisation d'un dossier masqué à cet effet peut également encourager la compréhension qu'il s'agit de fichiers intermédiaires liés à la génération qui n'ont pas besoin d'être enregistrés dans le contrôle de révision - ou utilisés directement dans votre déploiement.
la source
Il n'y a rien de mal. Ce sont toutes les dépendances de noeud que vous avez mentionnées dans le package.json.
Faites juste attention si vous avez téléchargé une partie du projet git hub, il pourrait y avoir beaucoup d'autres dépendances qui ne sont pas réellement requises pour la première application angular 2 hello world :)
la source