J'utilise Gulp pour générer du CSS minifié à partir de mon code SASS pour un projet sur lequel je travaille.
Je me demandais s'il était considéré comme la meilleure pratique pour régénérer ce CSS minifié lors de la diffusion en direct de Git ...
ou
Pour stocker les fichiers CSS minifiés dans Git afin qu'ils soient automatiquement poussés en direct vers la production sans autre travail de la part du serveur?
J'apprécierais les idées des gens à ce sujet. Merci!
version-control
git
css
deployment
Connor Gurney
la source
la source
/dev/null
.Réponses:
"Ça dépend." Pour un suivi de développement normal, non. Pour les déploiements cloud et DevOps, cependant, c'est souvent pratique, voire nécessaire.
La plupart du temps, @ptyx est correct . En effet, son «non» pourrait être exprimé un peu plus catégoriquement. Quelque chose comme "Non. Non! OMG NON! "
Pourquoi ne pas stocker des ressources minifiées ou compressées dans un système de contrôle de source comme Git?
Ils peuvent être régénérés presque trivialement par votre processus de construction à la volée à partir du code source. Le stockage des ressources compressées consiste essentiellement à stocker deux fois le même contenu logique. Il viole le principe "ne vous répétez pas" (alias DRY ).
Une raison moins philosophique mais plus pratique est que les actifs minifiés / optimisés ont une très faible compressibilité lorsqu'ils sont stockés dans Git. Les systèmes de contrôle des sources fonctionnent en reconnaissant les changements ("deltas") entre les différentes versions de chaque fichier stocké. Pour ce faire, ils "diffèrent" le dernier fichier avec la version précédente et utilisent ces deltas pour éviter de stocker une copie complète de chaque version du fichier. Mais les transformations effectuées à l'étape de réduction / optimisation suppriment souvent les similitudes et les points de cheminement utilisés par les algorithmes diff / delta . L'exemple le plus trivial est la suppression des sauts de ligne et autres espaces; l'actif résultant n'est souvent qu'une seule longue file. De nombreuses parties du processus de création Web - des outils tels que Babel , UglifyJS , Browserify ,Moins et Sass / SCSS - transforment les actifs de manière agressive. Leur sortie est perturbable; de petits changements d'entrée peuvent entraîner des changements majeurs de sortie. Par conséquent, l'algorithme diff croit souvent qu'il voit à chaque fois un fichier presque entièrement différent. Vos référentiels se développeront ainsi plus rapidement. Vos disques peuvent être suffisamment volumineux et vos réseaux assez rapides, ce qui n'est pas un problème majeur, surtout s'il y avait une valeur à stocker deux fois les actifs minifiés / optimisés - bien que sur la base du point 1, les copies supplémentaires puissent être inutiles à 100% gonfler.
Il existe cependant une exception majeure à cela: les déploiements DevOps / cloud. Un certain nombre de fournisseurs de cloud et d'équipes DevOps utilisent Git et similaire non seulement pour suivre les mises à jour de développement, mais également pour déployer activement leurs applications et leurs actifs sur des serveurs de test et de production. Dans ce rôle, la capacité de Git à déterminer efficacement "quels fichiers ont changé?" est aussi important que sa capacité plus granulaire à déterminer "ce qui a changé dans chaque fichier?" Si Git doit faire une copie de fichier presque complète pour les actifs minifiés / optimisés, cela prend un peu plus de temps que cela ne le serait autrement, mais ce n'est pas grave car il fait toujours un excellent travail en évitant une copie de "chaque fichier du projet" sur chaque déployer le cycle.
Si vous utilisez Git comme moteur de déploiement, le stockage d'actifs minifiés / optimisés dans Git peut passer de "non!" à souhaitable. En effet, cela peut être nécessaire, par exemple si vous manquez de solides opportunités de build / post-traitement sur les serveurs / services sur lesquels vous déployez. (Dans ce cas, la segmentation des actifs de développement et de déploiement est une boîte de vers distincte. Pour l'instant, il suffit de savoir qu'elle peut être gérée de plusieurs manières, y compris avec un seul référentiel unifié, plusieurs branches, sous-dépôts ou même plusieurs référentiels qui se chevauchent. )
la source
Non.
Le contrôle de source ne doit contenir que la source. S'il est généré à partir de la source, il n'y appartient pas - et doit être généré par votre processus de génération.
La raison fondamentale pour laquelle vous ne voulez pas contrôler à la source les artefacts de construction intermédiaires est que si vous le faites, il devient vraiment difficile de savoir si ce que vous exécutez provient de la source que vous venez de modifier ou d'un produit intermédiaire que vous n'avez pas réussi à reconstruire. .
la source
configure
scripts autoconf générés dans git pour cette raison.