Как установить приложение NPM (внутри контейнера Docker), которое было отделено от Git Submodule - PullRequest
0 голосов
/ 22 октября 2018

Я столкнулся с проблемой, которую не могу побороть около недели.Итак, вот в чем дело

Основное описание

У нас есть Yii2 приложение на основе Базовый шаблон приложения Yii2 .Это главное приложение.Наш репозиторий размещен на Bitbucket .

Также у нас есть приложение Vue.js , которое было установлено с использованием NPM и построено с использованием Webpack .Он также имеет репозиторий на Bitbucket .Это приложение в основном является SPA для части Yii2, и оно было добавлено как субтитр Git в эту часть Yii2.Он находится в каталоге /web/client.

Мы используем Bitbucket Pipelines для сборки и развертывания.Трубопроводы используют контейнеры Docker.У нас есть собственный репозиторий на Docker Hub, основанный на репозитории php: 7.2.9 (основанном на Debian).Таким образом, у нас есть полный доступ к нему, и мы можем изменить или перенастроить его.

Вот несколько упрощенных процессов развертывания:

  1. Bitbucket устанавливает среду
  2. Выполните git submodule update --init --recursiveкоторая клонирует часть приложения Vue
  3. Установка части приложения Yii2 с помощью Composer
  4. Установка части приложения Vue.js с использованием NPM
  5. Удаление временных файлов и отправка на сервер

Основной выпуск

Выпуск происходит на 4-м шаге.Когда нам нужно установить Vue.js часть приложения.Проблема в том, что корневой каталог является корневым каталогом проекта.Предположим, что это /.В нем невозможно запустить npm install и npm run build.

Также мы не можем запустить что-то вроде этого: cd ./web/client/, npm install, npm run build, cd ../../, потому что это контейнер Docker.Поэтому я решил, что могу указать некоторые параметры для команды npm.

Я нашел пару решений, но все они делают одно и то же, как npm install --prefix ./web/client.Он не работает и имеет ошибку ENOLOCAL .Также я не нашел ничего полезного в логах npm.

Если я попробую npm --prefix ./web/client install ./web/client, то все идет хорошо.Но /web/client теперь содержит некоторые странные файлы, которые, вероятно, должны быть расположены в /web/client/node_modules/.bin

Так что главный вопрос, как запустить npm install и npm run build в текущем рабочем каталоге, но создать приложение в другом каталоге (в моем случае /web/client)?

1 Ответ

0 голосов
/ 22 октября 2018

Каждая команда Dockerfile RUN выполняется полностью, поэтому вы можете: cd ./web/client/, npm install, npm run build.Вам просто нужно убедиться, что это сделано за один шаг RUN.Вот так:

RUN cd ./web/client/ && npm install && npm run build
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...