Github eylemiyle npm bağımlılığını önbelleğe alma

Oct 06 2020

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 demektir yarn.lockveya package-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.lockveya package-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

5 PatrickDazé Oct 14 2020 at 02:19

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 kullanarak hashFiles. 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-keys temelde herhangi bir eşleşme olmaması durumunda kullanılacak varsayılan bir anahtardır. key