Как кешировать node_modules в сборке Docker с версией? - PullRequest
1 голос
/ 01 ноября 2019

Для кеширования node_modules я сначала добавляю package.json, а затем запускаю npm i внутри образа докера.

, что прекрасно работает. но мне также нужно иметь версию внутри package.json, и при каждом развертывании / сборке я увеличиваю номер версии.

Поскольку package.json было изменено, из-за этого docker не является кешем mode_modules.

Как я могу кешировать node_modules в этом senirio?

FROM node

# If needed, install system dependencies here

# Add package.json before rest of repo for caching
ADD package.json /app/
WORKDIR /app
RUN npm install

ADD . /app

# If needed, add additional RUN commands here

1 Ответ

0 голосов
/ 01 ноября 2019

Вы можете достичь этого кэша, используя 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

Теперь, если вы хотите установить 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...