@c0rewell

Оптимальный способ автоматической модификации исходного кода?

Всем доброго времени суток.

Есть большой модуль к одной из популярных e-commerce платформ. Модуль успешно существует и функционирует.
У заказчика появилось требование сделать возможным т.н. whitelabelling: т.е. заменить все, что связано с конторой заказчика на нечто иное.
Т.е. был модуль BrandName_PaymentGateway, а необходимо его превратить в OtherName_PaymentGateway вместе со всем его содержимым. Файлов в модуле много, более 1.5к. А еще больше строковых констант, переменных, неймспейсов и прочего с упоминанием BrandName.

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

Для PHP кода есть https://github.com/nikic/PHP-Parser и даже https://github.com/rectorphp/rector
Для JS, XML и CSS, вероятно, тоже есть подобные вещи.

Вопросы и мысли следующие:
1) Руками с помощью IDE все это делается достаточно быстро, но нужно будет сделать 200+ разных копий - не вариант.
2) До сих пор не найден достаточно универсальный инструмент для работы с текстом на PHP.
3) Есть мысли каким-то образом использовать git (patch) для более гибкой замены кусков кода, даже если искомая строка сместилась (основная ветка модуля активно развивается), чтобы после каждого релиза не переписывать правила замены.
4) Делать зоопарк из библиотек для обработки разных типов файлов - не хочется, тем более не хочется разносить правила замены по разным конфигам.
  • Вопрос задан
  • 172 просмотра
Пригласить эксперта
Ответы на вопрос 2
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Я бы сделал версию проекта, которую можно считать шаблонной.
Все места где BrandName заменил бы на уникальный placeholder на подобии TEMPLATE_BRAND_NAME
Далее замену исходного кода в файлах можно делать любой консольной утилитой типа sed при деплое или при необходимости.

sed -i -- 's/foo/bar/g' *

find . -type f -exec sed -i 's/foo/bar/g' {} +

То есть делаете основной модуль как обычно, и делаете билды под нужный бренд, в котором при сборке производится замена placeholder'ов на нужные строки.
Ответ написан
Комментировать
@romaf
я несколько раз пользовался проектами на основе вот этой штуки https://github.com/cookiecutter/cookiecutter она при запуске спрашивает разные вопросы, типа домен, имя компании, email, а потом на основе этих ответов генерит тебе проект нужный, а там и исходники и пути и имена файлов уже будут сгенерены. Если я правильно понял твою задачу, то это как раз то, что тебе нужно. Только надо будет сначала весь ваш код в их систему их темплейтов перенести.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы