*TLDR:*

A builtin mix task to run mix tasks directly from hex or a git repository 
(an SCM).

`mix x phx_new phx.new`

*Problem*:

Currently if you would like to distribute a mix task or CLI tool, you 
either need to have the user first install an archive (like `mix 
archive.install hex phx_new`) or the user needs to  package and distribute 
it themselves.

The Node.js ecosystem has a solution to this called `npx`, that enables a 
developer to run a CLI tool without globally installing a package or 
creating a project first. This is useful for many scaffolding CLIs that 
generate new projects: e.g., `npx create-react-app my-app`.

In Elixir, we have the powerful `Mix.install/2` function that can enable 
installing packages in iex or scripts without installing them globally (not 
currently possible at all unless I'm mistaken) or creating a new project.

This still requires the user to write a script or boot up iex.

*Solution*:

A builtin mix task to run mix tasks directly from hex or a git repository 
(an SCM).

`mix x phx_new phx.new`

*Advantages:*

- Easier way to distribute CLI tooling
- Remove a step from projects like phoenix for installing the scaffolding 
CLI
- Building this into Elixir (vs having a 3rd party CLI people can install) 
ensures that users have it and library authors can take advantage of it 
reliably

*Disadvantages:*

- Another feature to maintain

*Considerations:*

- What to name the mix task? The above is just not the real proposed name, 
just the closed thing to the `npx` convention
- Should libraries be able to declare a "default" task, such that `mix x 
phx_new` works without explicitly declaring the task?

Notes:

I have a script in my dotfiles that as a proof of concept

```elixir
#!/usr/bin/env elixir

[package, task | args] = System.argv()

Mix.install([String.to_atom(package)])

Mix.Task.run(task, args)
```

Let me know what you think!

- Mitch

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/d2e4ac74-8ef2-499b-88dc-3b0577fc1300n%40googlegroups.com.

Reply via email to