Установка Vue.js и запуск начальной загрузки в контейнере docker

#javascript #html #node.js #docker #vue.js

#javascript #HTML #node.js #docker #vue.js

Вопрос:

Я создаю приложение, используя Django, и я решил основать интерфейс на Vue.js (также используется bootstrap-vue для экономии некоторого времени). Я относительно новичок в мире интерфейса, и я читал о webpack и связывании в целом, и из того, что я прочитал, кажется, что было бы лучше установить vue.js, загрузка vue и т.д. Через npm вместо использования CDN. И вот где я сталкиваюсь со своей первой проблемой, когда я устанавливаю их через npm, кажется, что разные модули отсутствуют. Соответствующая часть моего Dockerfile и docker-compose выглядят следующим образом:

 # Installing other not relevant dependencies
RUN npm install bootstrap@4.5.2 
                bootstrap-vue@2.16.0 
                jquery@^1.9.1 
                popper.js@^1.16.1 
                vue@2.6.11
COPY "./" "./"
  

И мой docker-compose.yml

 version: "3.7"
services:
  web:
    build: ./web
    command: ["python3", "manage.py", "runserver", "0.0.0.0:8000"]
    ports:
      - "8000:8000"
    volumes:
      - ./web:/usr/local/share/src/app:z
      - static:/usr/local/share/src/app/static
      - media:/usr/local/share/src/app/media
      - node_modules:/usr/local/share/src/app/node_modules

volumes:
  static:
  media:
  node_modules:
  

Поскольку мой проект не основан на JS, я решил обойтись без package.json файла и просто установить необходимые модули в Dockerfile. Тома в файле compose добавлены, чтобы я не размещал их локально и в моем репозитории git, а только в контейнере docker. node_modules успешно установлены в контейнер docker, однако, когда я пытаюсь добавить их в свой base.html шаблон, я получаю ошибку 404. Что касается того, как я пытался их добавить, я пытался использовать относительный путь к node_modules. Например:

 <script src="../../node_modules/bootstrap/dist/js/boostrap.min.js"></script>
  

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

Комментарии:

1. exec в контейнер и проверьте, действительно ли там файлы.

2. Я бы рассматривал интерфейсный проект как в основном отдельное приложение; напишите package.json для него файл, поскольку это стандартный способ объявления зависимостей в Javascript. Однако не используйте его volumes: для перезаписи всей работы, выполняемой образом; в частности, монтирование тома поверх node_modules дерева заставит Docker игнорировать любые изменения в установленных пакетах.

3. @DavidMaze Я также думаю, что было бы неплохо рассматривать интерфейсную часть как отдельное приложение, однако у меня нет большого опыта работы с интерфейсной частью, и я не уверен, как это сделать. Что касается томов, если я опущу часть тома, то node_modules не будут постоянными, и если я сделаю это как стандартный том, то в конечном итоге у меня будут модули локально, чего я хочу избежать.