Github eylemiyle npm bağımlılığını önbelleğe alma
Npm bağımlılıklarını önbelleğe almak istiyorum, böylece her ittiğimde npm yüklemesi yapmam ve bunun yerine önbellekten yüklemem.
Şimdi github eyleminin bunu desteklediğini düşünüyorum ? GitHub eylemlerindeki adımları nasıl önbelleğe alabilirim?
İşte birkaç durum
- Eğer
package.jsondeğişiklik olursa , bu demektiryarn.lockveyapackage-lock.jsondeğişmişse npm önbelleği kur ve güncelle - Benim yukarıda noktayı genişletme, katılımcı yapıyor olabilir hem
yarn installvenpm install
Yukarıdaki aynı sorudan, github eylemimi bunun gibi bir şeye değiştirdim
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
Bu, npm installbağımlılıkları yüklemek için hesaplama zamanımı hala azalttı ve azaltmadı (Bu yüzden bunun doğru çalışıp çalışmadığından emin değilim)
Sonra yarn install axiosönbelleğimi güncelleyeceğini umuyordum ama yükleme sonrası bunu günlüğe kaydedilmiş olarak görüyorum
Post job cleanup.
Cache hit occurred on the primary key Linux-npm-cache-, not saving cache.
İşte sorularım, başarmak mümkün mü
package.jsonDeğişiklik varsa , bunun anlamıyarn.lockveyapackage-lock.jsondeğişmesi ,npm installönbelleği güncelle ve güncelle- Benim yukarıda noktayı genişletme, katılımcı yapıyor olabilir hem
yarn installvenpm install
Ve birisi bana bunu açıklayabilir mi
with:
path: ~/.npm
key: ${{ runner.OS }}-npm-cache-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.OS }}-npm-cache-
Yanıtlar
GitHub eylemleri ile verimli bir şekilde önbelleğe alma yapmak için bir package-lock.jsonveya yarn.lockmevcut olması gerekir . Bu dosya, paketleri kurarken otomatik olarak oluşturulur. Package-lock.json hakkında daha fazla bilgi istiyorsanız , dokümanlara bakın .
Şimdi npm ve ipliğin aynı projede kullanılıp kullanılmayacağı konusu var. Bu konu hakkında daha fazla bilgiyi burada bulabilirsiniz .
Soruya dayanarak, hem package-lock.json hem de thread.lock'un var olduğunu varsayalım. İkisinden yalnızca birini kullanıyorsanız, birini aşağıdan kaldırmakta özgürsünüz. Aşağıdaki yapılandırma yarn config get cacheFolder, önbellek klasörünü almak için kullanılan iplik sürümü 2 içindir . Başka bir iplik versiyonu için belgelere bakın .
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
Bu kadar! Bir şey daha hariç. Yukarıda ~/.npmnpm bağımlılıklarını önbelleğe almak için kullanıyoruz . Performans açısından önbelleğe almak daha hızlı olacaktır, **/node_modulesancak bazı durumlarda bu, çakışmalara neden olabilir. Hangisinin sizin için işe yaradığını görmek için denemekten çekinmeyin. Bununla ilgili daha fazla bilgi burada ve burada .
Sorunuzdan ayrıca aşağıdaki kodu açıklamanızı istediniz:
with:
path: ~/.npm
key: ${{ runner.OS }}-npm-cache-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.OS }}-npm-cache-
https://github.com/actions/cache#usage:
yol - Önbelleğe alınacak ve geri yüklenecek dosyaların, dizinlerin ve joker karakter kalıplarının listesi. Desteklenen modeller için @ actions / glob'a bakın.
key - Önbellek
geri yükleme anahtarlarını geri yüklemek ve kaydetmek için açık bir anahtar - Anahtar için önbellek isabeti gerçekleşmediyse önbelleği geri yüklemek için kullanılacak sıralı bir anahtar listesi
Bu nedenle yukarıdaki kod:
pathönbelleğe alınacak / geri yüklenecek klasördür (bağımlılıkların kurulduğu yer)keyönbelleğe alınacak yol için benzersiz bir tanımlayıcıdır. Bu durumda herhangi bir**/package-lock.jsondosyanın içeriğini kullanarakhashFiles. Temel olarak package-lock.json dosyası değiştiğinde, bu bağımlılıkların değiştiği ve önbelleğin kullanılmaması gerektiği anlamına gelir.restore-keystemelde herhangi bir eşleşme olmaması durumunda kullanılacak varsayılan bir anahtardır.key