Локальная отладка зависимостей через Mix

Вам когда-нибудь приходилось производить отладку библиотеки, чтобы отследить баг или просто посмотреть как она работает? В таких скриптовых языках, как Ruby или JS, обычно в код отлаживаемой библиотеки добавляют debug-методы, например puts "test" или console.log("test"), чтобы увидеть вывод при следующем запуске приложения.

В проектах на Elixir/Mix это не сработает, так как зависимости в общем случае компилируются единственный раз после их загрузки. К счастью для нас, mix (встроенный в Elixir инструмент) при помощи опции path позволяет проводить повторную компиляцию зависимостей после любых изменений в них. Достаточно указать path для зависимости в mix.exs проекта:

defp deps do
  [
    ...
    {:my_dep, '~> 1.0.0', path: 'deps/my_dep'}
    ...
  ]
end

После этого на этапе компиляции mix будет обращаться к зависимости, находящейся по адресу deps/my_dep, и, если обнаружит изменения, скомпилирует её повторно. Попробуйте добавить операторы отладки в код библиотеки и увидите сами!

Абсолютные и относительные пути

Отметим, что опция path может обращаться не только к папке deps, но и переходить по любым другим относительным или абсолютным системным адресам, например:

defp deps do
  [
    ...
    {:my_dep, '~> 1.0.0', path: '../path/to/my/local/my_dep'}
    ...
  ]
end

Это особенно полезно, если вы разрабатываете для вашего проекта собственный Hex или хотите локально создать патч из всех изменённых файлов, чтобы позже отправить их автору на согласование.

Сброс изменений зависимостей

По завершении отладки для возвращения зависимости в исходное состояние удалите её и перезагрузите следующим образом:

mix do deps.clean my_dep, deps.get, compile

Всё вернётся на свои места, как это было в самом начале.

© 2020 / Россия Любые мысли и вопросы пишите на elixir@wunsh.ru.