#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 не будут постоянными, и если я сделаю это как стандартный том, то в конечном итоге у меня будут модули локально, чего я хочу избежать.