Использование пряжи 2 (Ягода) для нанесения упаковки на изображение докера

#yarnpkg #yarnpkg-v2

Вопрос:

Я переношу приложение VueJS из «классической» пряжи 1.x в пряжу 2. Следование документации по установке просто и работает без проблем.

Самая сложная часть возникает при упаковке приложения в образ Docker.

Текущий файл Dockerfile

 FROM node:14-alpine AS build-stage

WORKDIR /app

COPY package.json yarn.lock ./

RUN yarn install

COPY . ./

RUN yarn build --modern 
    amp;amp; find dist -type f -exec gzip -k "{}" ;

FROM nginx:mainline-alpine as production-stage

RUN apk add --no-cache curl

HEALTHCHECK CMD curl -f http://localhost || exit 1

COPY docker/entrypoint.sh /
RUN chmod  x /entrypoint.sh

COPY docker/app.nginx /etc/nginx/conf.d/default.conf
COPY --from=build-stage /app/dist /usr/share/nginx/html

ENTRYPOINT [ "/entrypoint.sh" ]
 

Возможно, я искал не в тех местах, но я не смог найти никакой информации о том, как будет выглядеть установка нулевой установки Yarn 2 для образа Docker.

Есть ли у вас какие — либо рекомендации о том, как использовать подход Yarn 2 в a Dockerfile ?

Ответ №1:

Из-за странной ошибки 22 с процессом установки пакета yarn 2 я обнаружил, что это наиболее эффективный метод установки yarn@berry с докером. Вероятно, есть лучший способ сделать это, но я не знаю ни одного.

 FROM node:latest as build
WORKDIR /app

# copy only the package.json file so yarn set version can
# correctly download its modules for berry without overwriting
# the existing yarnrc and cache files. If the rc is added now,
# yarn will attempt to use the berry module without it being
# installed.
COPY package.json .
RUN yarn set version berry

# and _now_ pull in the rest of the build files overriding
# the rc generated by setting the yarn version
COPY yarn.lock .yarn .yarnrc.yml ./
RUN yarn install
COPY . .

# continue with your build process
 

Тем не менее, я отмечу, что yarn предназначен для запуска из локальной .yarn/releases папки, поэтому лучшим способом может быть просто установить yarn2 в локальной папке и добавить его в репозиторий, как рекомендует yarn. Затем в качестве предварительного шага с извлечением package.json файла извлеките необходимые .yarn файлы вместе с ним, как показано выше. Это должно работать в большинстве случаев, однако иногда это вызывало у меня трудности, отсюда и приведенный выше пример.

 FROM node:latest as build
WORKDIR /app

# Copy in the package file as well as other yarn
# dependencies in the local directory, assuming the
# yarn berry release module is inside .yarn/releases
# already
COPY package.json yarn.lock .yarn .yarnrc.yml ./

RUN yarn install
COPY . .

# continue with your build process