Мне нужно загрузить, изменить и написать код в файле mix.exs. Я хочу иметь возможность загрузить файл, написать зависимости и записать файл.Программный код Elixir:
Я начинаю с:
defmodule Elixir_2ndTest.Mixfile do
use Mix.Project
def project do
[app: :elixir_2nd_test,
version: "0.0.1",
elixir: "~> 1.2",
build_embedded: Mix.env == :prod,
start_permanent: Mix.env == :prod,
description: description(),
deps: deps]
end
def application do
[applications: [:logger]]
end
defp deps do
[]
end
end
И мне нужно, чтобы в конечном итоге с (единственное отличие заключается в DEPS удовольствия):
defmodule Elixir_2ndTest.Mixfile do
use Mix.Project
def project do
[app: :elixir_2nd_test,
version: "0.0.1",
elixir: "~> 1.2",
build_embedded: Mix.env == :prod,
start_permanent: Mix.env == :prod,
description: description(),
deps: deps]
end
def application do
[applications: [:logger]]
end
defp deps do
[{:httpoison, "~> 0.8.3"}]
end
end
Зависимости происходят из другой системы сборки (I не может использовать hex напрямую из общедоступного Интернета, поэтому я использую его в режиме OFFLINE и отбрасываю зависимости в .hex/
Я знаю, какие зависимости и какие версии необходимо вставлять в функции deps (в этом случае httpoison 0.8.3).
Если мое понимание правильное, это должно быть возможно, загрузив файл, указав, изменив, выполнив незаметность.
Это то, что у меня до этого момента:
{:ok, body} = File.read("mix.exs")
{:ok, ast} = Code.string_to_quoted(body)
Любого указатель на том, как я могу изменить AST и записать его обратно будет оценен.
Я немного заглянул в это в надежде добавить что-то вроде 'mix install', похожего на' npm install', вам в основном придется разбирать и lex-файл. У меня не было возможности вникать в это.Если вы это сделаете, это будет здорово, но его определенно нетривиально, так как deps может быть функцией или несколькими функциями или списком в функции проекта. – TattdCodeMonkey
Я знаю, что такое депо. Мне просто нужно бросить их туда. Все, что там, будет заменено. – Mircea