#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