Quelle est la meilleure méthode pour regrouper Angular (version 2, 4, 6, ...) pour la production sur un serveur Web en direct.
Veuillez inclure la version angulaire dans les réponses afin que nous puissions mieux suivre son évolution vers les versions ultérieures.
Réponses:
2.x, 4.x, 5.x, 6.x, 7.x, 8.x, 9.x
(TypeScript) avec Angular CLIConfiguration OneTime
npm install -g @angular/cli
ng new projectFolder
crée une nouvelle applicationÉtape de regroupement
ng build --prod
(exécuté en ligne de commande lorsque le répertoire estprojectFolder
)prod
ensemble de drapeaux pour la production (voir la documentation angulaire pour la liste des options incluses avec le drapeau de production).Compresser à l'aide de la compression Brotli des ressources à l'aide de la commande suivante
for i in dist/*; do brotli $i; done
les bundles sont générés par défaut dans projectFolder / dist (/ $ projectFolder pour 6)
Production
Tailles avec Angular
9.0.0
avec CLI9.0.1
et option CSS sans routage angulairedist/main-[es-version].[hash].js
Votre application intégrée [taille ES5: 158 Ko pour la nouvelle application CLI Angular vide, 40 Ko compressés].dist/polyfill-[es-version].[hash].bundle.js
les dépendances polyfill (@angular, RxJS ...) regroupées [taille ES5: 127 Ko pour la nouvelle application CLI Angular vide, 37 Ko compressés].dist/index.html
point d'entrée de votre candidature.dist/runtime-[es-version].[hash].bundle.js
chargeur de webpackdist/style.[hash].bundle.css
les définitions de styledist/assets
ressources copiées à partir de la configuration des actifs de la CLI angulaireDéploiement
Vous pouvez obtenir un aperçu de votre application à l'aide de la
ng serve --prod
commande qui démarre un serveur HTTP local de sorte que l'application avec les fichiers de production soit accessible à l'aide de http: // localhost: 4200 .Pour une utilisation en production, vous devez déployer tous les fichiers du
dist
dossier sur le serveur HTTP de votre choix.la source
2.0.1 Final
en utilisant Gulp (TypeScript - Cible: ES5)Configuration OneTime
npm install
(exécuté en cmd lorsque le répertoire est projectFolder)Étapes de regroupement
npm run bundle
(exécuté en cmd lorsque le répertoire est projectFolder)les bundles sont générés dans projectFolder / bundles /
Production
bundles/dependencies.bundle.js
[ taille: ~ 1 Mo (aussi petit que possible)]bundles/app.bundle.js
[ taille: dépend de votre projet , le mien est ~ 0,5 Mo ]Structure des fichiers
dist-systemjs.config.js
balise après les balises de bundle permettrait toujours au programme de s'exécuter mais le bundle de dépendances serait ignoré et les dépendances seraient chargées à partir dunode_modules
dossier.Le mieux que j'ai pu faire encore :)
la source
inline-templates
est exécuté, il insère les modèles, puis crée une copie de tous les dossiers et fichiers d'application surdist/app
. Ensuite,dist-systemjs.config.js
vous mappezapp
versdist/app
un dossier qui n'existera pas si vous utilisez ledist
dossier en tant que root. Souhaitez-vous pas exécuter votre application à partir dudist
dossier? Et si c'est le cas, vous n'auriez pas dedist
dossier imbriqué dans ledist
dossier racine . Je dois manquer quelque chose d'autre ici. N'avez-vous pas besoin de dire à systemjs d'utiliser vos fichiers groupés et non les fichiers habituels trouvés dans ledist/app
dossier?Angular 2 avec Webpack (sans configuration CLI)
1- Le tutoriel de l'équipe Angular2
L'équipe Angular2 a publié un tutoriel pour l'utilisation de Webpack
J'ai créé et placé les fichiers du tutoriel dans un petit projet de départ GitHub . Vous pouvez donc essayer rapidement le workflow.
Instructions :
installation de npm
npm start . Pour le developpement. Cela créera un dossier virtuel "dist" qui sera chargé à votre adresse d'hôte local.
npm run build . Pour la production. "Cela créera une version physique du dossier" dist "qui peut être envoyée à un serveur Web. Le dossier dist fait 7,8 Mo, mais seulement 234 Ko sont réellement nécessaires pour charger la page dans un navigateur Web.
2 - Un kit de démarrage Webkit
Ce kit de démarrage Webpack offre plus de fonctionnalités de test que le tutoriel ci-dessus et semble assez populaire.
la source
Workflow de production angulaire 2 avec SystemJs Builder et Gulp
Angular.io propose un didacticiel de démarrage rapide. J'ai copié ce tutoriel et étendu avec quelques tâches de gulp simples pour tout regrouper dans le dossier dist qui peut être copié sur le serveur et fonctionner comme ça. J'ai essayé d'optimiser tout pour bien fonctionner sur Jenkis CI, donc node_modules peut être mis en cache et n'a pas besoin d'être copié.
Code source avec exemple d'application sur Github: https://github.com/Anjmao/angular2-production-workflow
Étapes de la productionNode : Bien que vous puissiez toujours créer votre propre processus de construction, mais je recommande fortement d'utiliser angular-cli, car il a tous les workflows nécessaires et il fonctionne parfaitement maintenant. Nous l'utilisons déjà en production et nous n'avons aucun problème avec angular-cli.
la source
CLI angulaire 1.xx (fonctionne avec Angular 4.xx, 5.xx)
Cela prend en charge:
La configuration initiale
Vous pouvez ajouter
--style=scss
pour la prise en charge de SASS .scss.Vous pouvez ajouter
--ng4
pour utiliser Angular 4 au lieu d'Angular 2.Après avoir créé le projet, la CLI s'exécutera automatiquement
npm install
pour vous. Si vous souhaitez utiliser Yarn à la place, ou si vous voulez simplement regarder le squelette du projet sans installer, vérifiez comment le faire ici .Étapes du bundle
Dans le dossier du projet:
Dans la version actuelle, vous devez spécifier--aot
manuellement, car il peut être utilisé en mode développement (bien que ce ne soit pas pratique en raison de la lenteur).Cela effectue également la compilation AoT pour des bundles encore plus petits (pas de compilateur angulaire, à la place, une sortie de compilateur générée). Les bundles sont beaucoup plus petits avec AoT si vous utilisez Angular 4 car le code généré est plus petit.
Vous pouvez tester votre application avec AoT en mode développement (sourcemaps, pas de minification) et AoT en exécutant
ng build --aot
.Production
Le répertoire de sortie par défaut est
./dist
, bien qu'il puisse être modifié dans./angular-cli.json
.Fichiers déployables
Le résultat de l'étape de génération est le suivant:
(Remarque:
<content-hash>
fait référence au hachage / empreinte digitale du contenu du fichier qui est censé être un moyen de contournement du cache, cela est possible car Webpack écrit lesscript
balises lui-même)./dist/assets
Fichiers copiés tels quels
./src/assets/**
./dist/index.html
De
./src/index.html
, après y avoir ajouté des scripts webpack, lefichier de modèle source est configurable dans
./angular-cli.json
./dist/inline.js
Petit chargeur de webpack / polyfill
./dist/main.<content-hash>.bundle.js
Le fichier .js principal contenant tous les scripts .js générés / importés
./dist/styles.<content-hash>.bundle.js
Lorsque vous utilisez des chargeurs Webpack pour CSS, qui est la méthode CLI, ils sont chargés via JS ici
Dans les anciennes versions, il créait également des versions gzippées pour vérifier leur taille et des
.map
fichiers sourcemaps, mais cela ne se produit plus car les gens continuaient à demander de les supprimer.Autres fichiers
Dans certaines autres occasions, vous pouvez trouver d'autres fichiers / dossiers indésirables:
./out-tsc/
De
./src/tsconfig.json
« soutDir
./out-tsc-e2e/
De
./e2e/tsconfig.json
« soutDir
./dist/ngfactory/
Depuis le compilateur AoT (non configurable sans bifurquer la CLI à partir de la beta 16)
la source
<content-hash>
des bundles dans prod. cela peut entraîner des problèmes lors de l'obtention du dernier pack?À ce jour, je trouve toujours le livre de recettes de la compilation anticipée comme la meilleure recette pour le regroupement de la production. Vous pouvez le trouver ici: https://angular.io/docs/ts/latest/cookbook/aot-compiler.html
Mon expérience avec Angular 2 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 montre la taille du téléchargement, le nombre de fichiers, etc. pour une application Angular 2 dans la version dev vs AoT - que vous pouvez voir ici:
https://youtu.be/ZoZDCgQwnmQ
Vous trouverez le code source utilisé dans la vidéo ici:
https://github.com/fintechneo/angular2-templates
la source
la source
Vous pouvez déployer votre application angulaire en
github
utilisant angular-cli-ghpagesconsultez le lien pour savoir comment déployer à l'aide de ce cli.
le site Web déployé sera stocké dans une succursale en
github
généralpages-gh
l'utilisation peut cloner la branche git et l'utiliser comme un site Web statique sur votre serveur
la source
"Meilleur" dépend du scénario. Il y a des moments où vous ne vous souciez que du plus petit ensemble unique possible, mais dans les grandes applications, vous devrez peut-être envisager un chargement paresseux. À un moment donné, il devient impossible de servir l'application entière en un seul paquet.
Dans ce dernier cas, Webpack est généralement le meilleur moyen car il prend en charge le fractionnement de code.
Pour un seul paquet, je considérerais Rollup, ou le compilateur Closure si vous vous sentez courageux :-)
J'ai créé des échantillons de tous les bundlers angulaires que j'ai jamais utilisés ici: http://www.syntaxsuccess.com/viewarticle/angular-production-builds
Le code peut être trouvé ici: https://github.com/thelgevold/angular-2-samples
Version angulaire: 4.1.x
la source
Installez simplement angular 4 avec webpack 3 en une minute, votre bundle ENV de développement et de production sera prêt sans aucun problème, suivez le document github ci-dessous
https://github.com/roshan3133/angular2-webpack-starter
la source
Veuillez essayer ci-dessous la commande CLI dans le répertoire de projet actuel. Il créera un ensemble de dossiers dist. afin que vous puissiez télécharger tous les fichiers dans le dossier dist pour les déploiements.
ng build --prod --aot --base-href.
la source
ng serve fonctionne pour servir notre application à des fins de développement. Et pour la production? Si nous regardons notre fichier package.json, nous pouvons voir qu'il existe des scripts que nous pouvons utiliser:
Le script de génération utilise la génération ng de la CLI angulaire avec l'indicateur --prod. Essayons ça maintenant. Nous pouvons le faire de deux manières:
# en utilisant les scripts npm
# en utilisant directement le cli
Cette fois, on nous donne quatre fichiers au lieu des cinq. L'indicateur --prod indique à Angular de réduire la taille de notre application.
la source