Я пытаюсь выяснить лучший/самый чистый способ разблокировать существующий пакет в атмосфере в рамках проекта. Я встречался несколько раз, когда существующий пакет нуждался в некоторых модификациях, и я был вынужден разблокировать его.
Насколько я могу судить, существуют следующие варианты. К сожалению, все они имеют свои проблемы, и я еще не нашел идеального решения. Я буду использовать meteor-router
в качестве примера:
1. Просто скопируйте файлы пакета в папку с пакетами
Шаги:
- удалить
packages/router/.git/
- отредактируйте
packages/.gitignore
и удалите строку 'router' - удалите маршрутизатор из
smart.json
- добавить
packages/router
в репозиторий проекта и зафиксировать - теперь вносите изменения (таким образом, ваша первоначальная фиксация является чистой версией, и вы можете решить, что вы изменили сами).
Преимущества:
- легко достичь и понять
- весь код, на который вы полагаетесь, можно найти в вашем репозитории проектов
Недостатки:
- вы потеряете всю историю исходных репозиториев
- сложно обновить до более новой версии
- сложно внести изменения в исходный проект
Даже не рассматривайте это для каких-либо простейших пакетов!
2. Вилка на github, затем...
Чтобы разбить пакет на github, вы можете проверить свой файл smart.lock
, чтобы узнать, какой репозиторий используется. Перейдите на страницу github этого репозитория и разблокируйте его.
Затем у вас есть три варианта:
2a. Добавьте его как подмодуль git
Дополнительная информация о подмодулях git: http://git-scm.com/book/en/Git-Tools-Submodules
Шаги:
- См. ссылку выше о том, как запустить/создать/обновить подмодуль
- Удалите пакет из
smart.json
Преимущества:
- версии субмодуля подключены к вашему проекту
- Изменения сразу же подбираются
Недостатки:
- Все разработчики должны запускать
git submodule init
в первый раз иupdate
для обновления - Вы должны знать о проблемах с подмодулями при редактировании выписки
- Читайте о других проблемах с подмодулями
2b. Измените проект smart.json
, чтобы использовать свою версию
Шаги:
- В
smart.json
найдите"router": {}
и добавьте"git": "https://github.com/USER/meteor-router.git"
в пустой{}
. - При необходимости добавьте
"branch"
или"tag"
.
Преимущества:
- Вы можете использовать Meteorite для управления внешними пакетами.
- Будет работать автоматически для других разработчиков и в средах развертывания.
Недостатки:
- Код в папке ваших пакетов не редактируется, так как это не репозиторий git
- Meteorite не будет автоматически обновляться до последней версии при каждом запуске
(Предлагаемое улучшение метеорита: разрешить установку пакетов в редактируемой форме, например, Python pip позволяет использовать параметр -e)
2с. Clone вне вашего проекта и добавьте "path"
в smart.json
Шаги:
- Клонирование пакета к месту вне вашего проекта
- Как и в случае с 2b, добавьте
"path"
к вашемуsmart.json
, чтобы указать Meteorite на местную проверку
Преимущества:
- Вы можете отредактировать пакет по своему усмотрению, и Meteor автоматически выполнит изменения.
Недостатки:
- Если вы зафиксируете этот
smart.json
, вы, скорее всего, сломаете все другие среды разработки/развертывания...
Какой метод вы используете? Как вы преодолеваете недостатки этого метода?
Возможно, я пропустил некоторые проблемы с этими решениями.