Используйте определенную версию пакета для каждого каталога с Homebrew на Mac

Используйте определенную версию пакета для каждого каталога с Homebrew на Mac

Я часто замечаю, что переключаюсь на определенную версию пакета, установленного с помощьюдомашнее пивопри переключении проектов.

$ 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.

(Да, длявторой раз за одну ночь(Я указал кому-то на инструмент, которым сам не пользовался.)

Связанный контент