
Я часто замечаю, что переключаюсь на определенную версию пакета, установленного с помощьюдомашнее пивопри переключении проектов.
$ cd ~/Desktop/projects/project1
$ brew switch phantomjs 2.0.0
Cleaning /usr/local/Cellar/phantomjs/1.9.7_1
Cleaning /usr/local/Cellar/phantomjs/1.9.8
Cleaning /usr/local/Cellar/phantomjs/2.0.0
2 links created for /usr/local/Cellar/phantomjs/2.0.0
И затем при смене проекта:
$ cd ~/Desktop/projects/project2
$ brew switch phantomjs 1.9.8
Cleaning /usr/local/Cellar/phantomjs/1.9.7_1
Cleaning /usr/local/Cellar/phantomjs/1.9.8
Cleaning /usr/local/Cellar/phantomjs/2.0.0
2 links created for /usr/local/Cellar/phantomjs/1.9.8
Можно ли как-то автоматизировать это, чтобы можно было принудительно brew
переключаться на указанную версию при работе с определенным проектом?
Было бы неплохо, если бы можно было создать файл с названием вроде этого .homebrew
внутри целевого каталога и оттуда указать требуемые пакеты и версии.
решение1
Чтобы прямо ответить на ваш вопрос: взгляните наондир. Я лично им не пользовался, но, похоже, он подходит для вашего варианта использования.
ondir — это небольшая программа для автоматизации задач, специфичных для определенных каталогов. Она работает, выполняя скрипты в каталогах, когда вы входите и выходите из них.
Но давайте немного поразмыслим...
Замена версий пакетов при входе/выходе из каталогов через оболочку, по сути, рискованна по ряду причин. (Для начала представьте себе два терминальных сеанса, каждый в своем собственном каталоге.)
То, о чем вы просите (конфигурация homebrew для каждого каталога), по сути является виртуальной машиной или контейнером, поскольку это выходит за рамки «виртуализации» языка (например, Ruby черезrbenv
, Питон черезvirtualenv
`) и вместо этого для всех системных пакетов. Вам следует рассмотреть возможность настройкибродягаbox для ваших проектов, чтобы должным образом изолировать их от вашего Mac и лучше управлять вашими зависимостями.
Ну, ладно, вернемся к вашей проблеме...
PhantomJS — это автономный инструмент, который, к счастью, доступен в видестатически связанный двоичный файл. Мы можем использовать это в своих интересах. Вместо того, чтобы менять версии PhantomJS через brew switch
, просто загрузите каждую статически связанную версию, вставьте двоичный файл в ~/bin
, назовите его соответствующим образом (например, phantomjs-1.9.8
) и настройте свои скрипты для вызова нужной версии. Если вы не можете настроить скрипты, вам нужно будет разработать другую схему (специфичные для проекта символические ссылки и т. д.)
Или, как предлагается вваш запрос на GitHub, вы также можете настроить свой PATH
, либо с помощью ondir
скрипта-обертки вокруг любых дисков phantomjs
.
(Да, длявторой раз за одну ночь(Я указал кому-то на инструмент, которым сам не пользовался.)