github 작업으로 npm 종속성 캐싱

Oct 06 2020

npm 종속성을 캐시하여 푸시 할 때마다 npm을 설치하지 않고 대신 캐시에서로드합니다.

이제 github 작업이이를 지원한다고 생각 합니까 ? : GitHub 작업에서 단계를 어떻게 캐시합니까?

다음은 몇 가지 사례입니다.

  • 경우 package.json수단의 변화, yarn.lock또는 package-lock.json그렇게 변경 설치 및 업데이트 캐시 NPM 할
  • 내 위의 지점을 확장하는 것은, 기여자 일을 할 수있는 모두 yarn install와npm install

위의 동일한 질문에서 github 작업을 다음과 같이 변경했습니다.

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

이것은 여전히 npm install의존성 설치에 대한 계산 시간을 줄이지 않았으며 (그래서 이것이 올바르게 작동하는지 확실하지 않습니다)

그런 다음 yarn install axios캐시가 업데이트되기를 바랐지만 설치 후 기록 된 것으로 표시됩니다.

Post job cleanup.
Cache hit occurred on the primary key Linux-npm-cache-, not saving cache.

그래서 여기 내 질문이 있습니다.

  • 만약 package.json수단의 변화, yarn.lock또는 package-lock.json이를 변경 npm install및 업데이트 캐시
  • 내 위의 지점을 확장하는 것은, 기여자 일을 할 수있는 모두 yarn install와npm install

그리고 누군가가 이것을 설명 할 수 있습니까?

    with:
      path: ~/.npm
      key: ${{ runner.OS }}-npm-cache-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.OS }}-npm-cache-

답변

5 PatrickDazé Oct 14 2020 at 02:19

GitHub 작업으로 효율적인 캐싱을 수행하려면 package-lock.json또는 yarn.lock존재 해야합니다 . 이 파일은 패키지를 설치할 때 자동으로 생성됩니다. package-lock.json에 대한 자세한 정보 는 문서를 확인하십시오 .

이제 npm과 yarn을 동일한 프로젝트에서 사용해야하는지 여부에 대한 주제가 있습니다. 여기에서 그 주제에 대해 자세히 알아보십시오 .

질문에 따라 package-lock.json과 yarn.lock이 모두 존재한다고 가정 해 보겠습니다. 둘 중 하나만 사용하는 경우 아래에서 자유롭게 제거하십시오. 아래 구성 yarn config get cacheFolder은 캐시 폴더를 가져 오는 데 사용 하는 yarn 버전 2 용입니다 . 다른 원사 버전 은 문서를 참조하십시오 .

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

그게 다야! 한 가지 더 빼고는. 위에서 우리는 ~/.npmnpm 종속성을 캐싱 하는 데 사용 합니다. 성능면에서는 캐시하는 것이 더 빠르지 **/node_modules만 경우에 따라 충돌이 발생할 수 있습니다. 어떤 것이 당신에게 적합한 지 시험해보십시오. 여기 와 여기 에 대해 자세히 알아 보십시오 .


귀하의 질문에서 다음 코드를 설명하도록 요청했습니다.

    with:
      path: ~/.npm
      key: ${{ runner.OS }}-npm-cache-${{ hashFiles('**/package-lock.json') }}
      restore-keys: |
        ${{ runner.OS }}-npm-cache-

https://github.com/actions/cache#usage:

경로 -캐시 및 복원 할 파일, 디렉토리 및 와일드 카드 패턴 목록입니다. 지원되는 패턴은 @ actions / glob을 참조하십시오. key-캐시 복원 키를 복원 및 저장하기위한 명시 적
키 -키에 대해 캐시 적중이 발생하지 않은 경우 캐시 복원에 사용할 순서가 지정된 키 목록

따라서 위의 코드는 다음과 같습니다.

  • path 캐시 / 복원 할 폴더 (종속성이 설치된 위치)입니다.
  • key캐시 될 경로의 고유 식별자입니다. 이 경우를 **/package-lock.json사용하여 모든 파일 의 내용을 해시합니다 hashFiles. 기본적으로 package-lock.json 파일이 변경되면 종속성이 변경되고 캐시를 사용해서는 안됩니다.
  • restore-keys 기본적으로 일치하는 항목이없는 경우 사용할 기본 키입니다. key