Вопрос или проблема
У меня есть два репозитория для веб-сайта: один для бекенда, другой дляFrontend. Я хочу скопировать файлы из папки фронтенда в директорию бекенда, чтобы всё можно было обслуживать из одного места.
Когда я запускаю команду build
на фронтенде, создаётся папка с именем dist/
. Я хочу скопировать все эти файлы в папку с относительным путем ../backend/public
. Эта папка public
может уже содержать некоторые другие файлы.
Мой текущий скрипт использует зашитые в код имена для index.html
и директории assets/
, но со временем может добавляться больше файлов, поэтому я хотел бы получить универсальное решение, которое будет копировать всё, что не изменилось в dist/
, в ../backend/public
.
#!/bin/bash
cd ../backend/public
rm -rf index.html assets
cp ../../frontend/dist/index.html ./
cp -r ../../frontend/dist/assets ./assets
Ваш скрипт можно сократить до:
#!/bin/bash
## удалите директорию assets, если она существует
[ -d ../backend/assets ] && rm -rf ../backend/assets
cp -r dist/{index.html,assets} ../backend
Нет необходимости использовать cd
в скрипте, а также удалять существующие файлы, если вы копируете вещи с тем же именем, нужно только удалить директории, поскольку в противном случае, если они существуют, любые файлы с другим именем будут сохранены. Если вы всегда копируете файлы с одинаковыми именами, это тоже не нужно.
Чтобы сделать это более универсальным, вы можете передать список файлов/директорий, которые хотите скопировать:
#!/bin/bash
for item in "$@"; do
## удалите директорию assets, если она существует
[ -d ../backend/"$item" ] && rm -rf ../backend/"$item"
cp -r dist/"$item" ../backend
done
Который вы затем выполните из директории frontend
следующей командой:
script.sh assets index.html
Ответ или решение
Замена файлов в одном каталоге файлами с одинаковыми именами из другого
В рамках разработки веб-приложений на основе раздельного подхода к архитектуре, часто возникает необходимость синхронизации файлов между различными репозиториями. В вашем случае, вы хотите заменить файлы в каталоге ../backend/public
файлами, сгенерированными в результате сборки фронтенда из папки dist/
в вашем проекте. Подход, который вы используете в своей скриптовой команде, можно улучшить, сделав процесс более универсальным и менее зависимым от статических имен файлов.
Проблема
Ваш текущий подход использует статическую привязку к имени файла index.html
и каталогу assets
, что может вызвать ряд проблем при добавлении новых файлов или изменениях в структуре каталога. Кроме того, метод удаления существующих файлов перед копированием может привести к потере важных данных, если в каталоге public
находятся файлы с другими именами.
Решение
Поскольку вам необходимо скопировать только изменённые файлы из dist/
в ../backend/public
, предлагаю следующий уровень абстракции, который позволит вам легко управлять копированием различных файлов и каталогов.
Оптимизированный скрипт
Вам стоит использовать следующий скрипт, который позволяет гибко передавать необходимые файлы для копирования:
#!/bin/bash
# Цель скрипта - обновить файлы в каталоге ../backend/public
for item in "$@"; do
# Проверяем существование директории
[ -d "../backend/$item" ] && rm -rf "../backend/$item"
cp -r "dist/$item" "../backend/"
done
Инструкция по выполнению
-
Сохраните скрипт в файл: Например, назовите его
update_backend.sh
и дайте ему права на выполнение с помощью командыchmod +x update_backend.sh
. -
Запустите скрипт из каталога фронтенда: Чтобы скопировать файлы, достаточно вызвать скрипт, перечисляя необходимые элементы:
./update_backend.sh assets index.html другие_файлы
Здесь в
другие_файлы
вы можете добавлять любые дополнительные имена файлов или директорий, которые необходимо синхронизировать.
Преимущества использования данного подхода
- Гибкость: Вы можете передавать любой набор файлов или каталогов для копирования без необходимости изменения самого скрипта.
- Безопасность: Удаляются лишь директории, после чего остается возможность для хранения файлов с другими именами, если в них есть необходимость.
- Простота в управлении: Перенос скрипта в потенциально новый проект или окружение займет минимальное время, что значительно упрощает процесс развертывания.
Заключение
Использование приведенного подхода позволит вам значительно упростить процесс синхронизации файлов между репозиториями, обеспечивая управление без излишней привязанности к конкретным именам файлов. Подходящий автоматизированный механизм, интегрированный в рабочий процесс, способствует повышению эффективности разработки и улучшает управляемость проекта.