Mise en cache de la dépendance npm avec l'action github
Je veux mettre en cache les dépendances de npm afin de ne pas installer npm à chaque fois que je pousse et au lieu de le charger simplement à partir du cache.
Je pense que l'action github prend en charge cela maintenant?: Comment mettre en cache les étapes dans les actions GitHub?
Voici quelques cas
- Si des
package.jsonchangements, ce qui signifieyarn.lockou ontpackage-lock.jsonchangé, npm installe et met à jour le cache - En prolongeant mon point ci-dessus, le contributeur pourrait faire les deux
yarn installetnpm install
De la même question ci-dessus, j'ai changé mon action github en quelque chose comme ça
name: Tsc compilation test
on: [push, pull_request]
jobs:
build:
name: Build
runs-on: ubuntu-18.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Cache NPM dependencies
uses: actions/cache@v1
with:
path: ~/.npm
key: ${{ runner.OS }}-npm-cache-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.OS }}-npm-cache-
- name: Install dependencies
run: npm install
- name: Test tsc
run: npm run ts-compile-check
Cela fait toujours npm installet n'a pas réduit mon temps de calcul pour installer les dépendances (donc je ne suis pas sûr si cela fonctionne correctement ou non)
Ensuite, j'ai yarn install axiosespéré que cela mettrait à jour mon cache, mais en post-installation, je vois cela comme connecté
Post job cleanup.
Cache hit occurred on the primary key Linux-npm-cache-, not saving cache.
Alors voici mes questions, est-il possible de réaliser
- Si
package.jsonchange, ce qui signifieyarn.lockou apackage-lock.jsonchangé, faites-lenpm installet mettez à jour le cache - En prolongeant mon point ci-dessus, le contributeur pourrait faire les deux
yarn installetnpm install
Et quelqu'un peut-il m'expliquer ça
with:
path: ~/.npm
key: ${{ runner.OS }}-npm-cache-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.OS }}-npm-cache-
Réponses
Afin d'avoir une mise en cache efficace avec les actions GitHub, il doit y avoir un package-lock.jsonou yarn.lockpresent. Ce fichier est généré automatiquement lors de l'installation des packages. Si vous souhaitez plus d'informations sur package-lock.json, consultez la documentation .
Maintenant, il y a le sujet de savoir si npm et yarn doivent être utilisés dans le même projet. En savoir plus sur ce sujet ici .
Sur la base de la question, supposons que package-lock.json et yarn.lock existent. Si vous n'utilisez que l'un des deux, n'hésitez pas à en supprimer un par le bas. La configuration ci-dessous est pour yarn version 2 qui utilise yarn config get cacheFolderpour obtenir le dossier de cache. Pour une autre version de fil, voir la documentation .
name: Tsc compilation test
on: [push, pull_request]
jobs:
build:
name: Build
runs-on: ubuntu-18.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - name: Cache yarn dependencies uses: actions/cache@v2 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn- - name: Cache npm dependencies uses: actions/cache@v2 with: path: '~/.npm' key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node-
- name: Install dependencies
run: npm install # or yarn install
- name: Test tsc
run: npm run ts-compile-check
C'est ça! Eh bien, sauf pour une dernière chose. Ci-dessus, nous utilisons ~/.npmpour la mise en cache des dépendances npm. En termes de performances, il serait plus rapide de mettre en cache, **/node_modulesmais dans certains cas, cela introduirait des conflits. N'hésitez pas à expérimenter pour voir lequel fonctionne pour vous. En savoir plus ici et ici .
À partir de votre question, vous avez également demandé d'expliquer le code suivant:
with:
path: ~/.npm
key: ${{ runner.OS }}-npm-cache-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.OS }}-npm-cache-
https://github.com/actions/cache#usage:
chemin - Une liste de fichiers, répertoires et modèles de caractères génériques à mettre en cache et à restaurer. Voir @ actions / glob pour les modèles pris en charge.
clé - Une clé explicite pour la restauration et la sauvegarde du cache
restauration-clés - Une liste ordonnée de clés à utiliser pour restaurer le cache si aucun succès cache a eu lieu pour la clé
Par conséquent, le code ci-dessus:
pathest le dossier qui sera mis en cache / restauré (où les dépendances sont installées)keyest un identifiant unique pour le chemin qui sera mis en cache. Dans ce cas, il hache le contenu de tout**/package-lock.jsonfichier en utilisanthashFiles. Fondamentalement, lorsque le fichier package-lock.json change, cela signifie que les dépendances ont changé et que le cache ne doit pas être utilisé.restore-keysest essentiellement une clé par défaut à utiliser au cas où il n'y aurait pas de correspondance pour lekey