Вы можете достичь этого кэша, используя BUILD_VERSION
вместе с package.json
версией.
ARG BUILD_VERSION=0.0.0
Установите для некоторого значения по умолчанию значение BUILD_VERSION
, оставьте то же значение от BUILD_VERSION
, что и для package.json
версии. чтобы игнорировать процесс установки npm.
Предположим, у вас есть версия в package.json 0.0.0
, а версия сборки должна быть 0.0.0
, чтобы игнорировать установку.
FROM node:alpine
WORKDIR /app
ARG BUILD_VERSION=0.0.0
copy package.json /app/package.json
RUN echo BUILD_VERSION is $BUILD_VERSION and Package.json version is $(node -e "console.log(require('/app/package.json').version);")
RUN if [ "${BUILD_VERSION}" != $(node -e "console.log(require('/app/package.json').version);") ];then \
echo "ARG version and Package.json is different, installing node modules";\
npm install;\
else \
echo "npm installation process ignored";\
fi
Чтобы игнорировать npmустановка во время сборки, запустите команду сборки с помощью
docker build --no-cache --build-arg BUILD_VERSION=0.0.0 -t test-cache-image .
![enter image description here](https://i.stack.imgur.com/Vz9fT.png)
Теперь, если вы хотите установить node_modules, просто обновите команду run, и она будет работатькак вы ожидаете, но больше контроля по сравнению с дорожкой кэширования.
docker build --no-cache --build-arg BUILD_VERSION=0.0.1 -t test-cache-image .
Это установит node_modules
, если версия package.json
не совпадает с версией сборки.
![enter image description here](https://i.stack.imgur.com/BQrbC.png)