yarn.lockのchecksumを使うときには、–frozen-lockfileを添えよう
Circle CIのCacheではまったので覚書。 やりたかったこと Yarnでインストールしたnode_modulesをcacheしてjobsで使いまわしたい。 起こった問題 save_cacheでのchecksumと […]
広告ここから
広告ここまで
目次
Circle CIのCacheではまったので覚書。
やりたかったこと
Yarnでインストールしたnode_modulesをcacheしてjobsで使いまわしたい。
jobs:
prepare:
docker:
- image: circleci/node:lts-browsers
working_directory: ~/repo
steps:
- checkout
- restore_cache:
name: Restore Yarn Package Cache
keys:
- yarn-packages-{{ .Branch }}-{{ checksum "yarn.lock" }}
- run: yarn
- save_cache:
name: Save Yarn Package Cache
key: yarn-packages-{{ .Branch }}-{{ checksum "yarn.lock" }}
paths:
- ~/.cache/yarn
- save_cache:
name: Save development dependencies
key: dev-dep-{{ .Branch }}-{{ checksum "yarn.lock" }}
paths:
- node_modules/
test:
docker:
- image: circleci/node:lts-browsers
working_directory: ~/repo
steps:
- checkout
- restore_cache:
name: Restore Dev dependencies
keys:
- dev-dep-{{ .Branch }}-{{ checksum "yarn.lock" }}
- run: ls -la
- run: ls -la node_modules
起こった問題
save_cacheでのchecksumと、後方のjobでのrestore_cacheのchecksumが一致しない。
そのためnode_modulesがrestoreされずにエラーになる。
原因
yarn(yarn install)すると、yarn.lockが更新される。そのためchecksumが異なる値になってしまっている。

対策
--frozen-lockfileオプションをつけることで、yarn.lockの更新をなくす。
jobs:
prepare:
docker:
- image: circleci/node:lts-browsers
working_directory: ~/repo
steps:
- checkout
- restore_cache:
name: Restore Yarn Package Cache
keys:
- yarn-packages-{{ .Branch }}-{{ checksum "yarn.lock" }}
- run: yarn --frozen-lockfile
- save_cache:
name: Save Yarn Package Cache
key: yarn-packages-{{ .Branch }}-{{ checksum "yarn.lock" }}
paths:
- ~/.cache/yarn
- save_cache:
name: Save development dependencies
key: dev-dep-{{ .Branch }}-{{ checksum "yarn.lock" }}
paths:
- node_modules/
test:
docker:
- image: circleci/node:lts-browsers
working_directory: ~/repo
steps:
- checkout
- restore_cache:
name: Restore Dev dependencies
keys:
- dev-dep-{{ .Branch }}-{{ checksum "yarn.lock" }}
- run: ls -la
- run: ls -la node_modules