web-dev-qa-db-fra.com

Comment puis-je récupérer manuellement les dépendances de go.mod?

J'utilise go 1.11 avec le support du module. Je comprends que l’outil go installe désormais automatiquement les dépendances lors de la construction/installation. Je comprends aussi le raisonnement.

J'utilise docker pour construire mes fichiers binaires. Dans de nombreux autres écosystèmes, il est courant de copier le manifeste de dépendance (package.json, Requirements.txt, etc.) et d'installer les dépendances séparément de la construction. Cela tire parti de la mise en cache de la couche de docker et rend les reconstructions beaucoup plus rapides, car les modifications de code dépassent largement les modifications de dépendance.

Je me demandais si vgo avait un moyen de le faire?

7
Alex Guerra

Vous pouvez utiliser la commande go mod vendor pour créer un dossier vendor dans le dossier racine du module principal et y copier toutes les dépendances. Après cela, vous pouvez passer le paramètre -mod=vendor à l'outil go, puis les dépendances du dossier vendor seront utilisées pour construire/compiler/tester votre application.

Donc, ce que vous pouvez faire pour accélérer vos constructions:

  1. Exécutez la commande go mod vendor pour avoir une version réelle de vos dépendances.
  2. Enregistrez/mettez en cache ce dossier vendor.
  3. Pendant les générations, restaurez ce dossier vendor et construisez/installez votre application en transmettant l’argument -mod=vendor à l’outil go. Aucune dépendance ne sera téléchargée, mais le contenu du dossier vendor sera utilisé.

Citant de go help mod:

Modules et vente

Lors de l'utilisation de modules, la commande go ignore complètement les répertoires des fournisseurs.

Par défaut, la commande go satisfait les dépendances en téléchargeant des modules à partir de leurs sources et en utilisant les copies téléchargées (après vérification, comme décrit dans la section précédente). Pour permettre l'interopérabilité avec les anciens versions de Go, ou pour vous assurer que tous les fichiers utilisés pour une construction sont stockés ensemble dans une seule arborescence de fichiers, 'go mod vendor' crée un répertoire nommé vendor dans le répertoire racine du module principal et stocke tous les fichiers les packages des modules de dépendance nécessaires à la prise en charge des versions et tests de paquets dans le module principal.

Construire en utilisant le répertoire de fournisseur de niveau supérieur du module principal pour satisfaire dépendances (désactivation de l'utilisation des sources réseau habituelles et des caches locaux.), utilisez 'go build -mod = vendor'. Notez que seul le module principal le répertoire du fournisseur de niveau supérieur est utilisé; Répertoires de fournisseurs situés ailleurs sont toujours ignorés.

5
icza

Vous pouvez utiliser un gestionnaire de paquets, il y en a beaucoup comme dep , glide et govendor . dep est plus récent et va être intégré à la chaîne d'outils go en tant qu'outil officiel de gestion des dépendances.

Nous fabriquons également des images docker pour les applications go et nous utilisons dind pour créer ces images. Nous avons préparé une image CI/CD avec toutes les dépendances préinstallées pour accélérer la construction. Cependant, il a fallu un peu de script pour tout coller ensemble.

De plus, la superposition des dépendances peut entraîner une grande taille des images du menu fixe. Je suggère d'essayer des constructions en plusieurs étapes qui pourraient aider à créer des images super légères.

1
mdh.heydari