在Phoenix中启动服务器后,是否可以自动启动浏览器?

时间:2020-03-17 18:19:56

标签: elixir phoenix-framework phoenix phoenix-live-view

我有一个Phoenix(1.4)LiveView(0.8)应用程序,我想在启动服务器时自动打开浏览器窗口。有人知道这是否可以完成吗?

我尝试查看是否可以像在FE应用程序中所做的那样在Webpack中配置该选项,但是我无法使其正常工作。

谢谢!

1 个答案:

答案 0 :(得分:1)

最清晰的方法是执行自定义mix任务,唯一的问题是如何真正打开浏览器。这已在docs中实现:

defp browser_open(path) do
    start_browser_command =
      case :os.type do
        {:win32, _} ->
          "start"
        {:unix, :darwin} ->
          "open"
        {:unix, _} ->
          "xdg-open"
      end

    if System.find_executable(start_browser_command) do
      System.cmd(start_browser_command, [path])
    else
      Mix.raise "Command not found: #{start_browser_command}"
    end
  end

现在剩下的就是做一个自定义任务,从config中获取主机和端口,并在其中调用phx.server任务并打开浏览器:

defmodule Mix.Tasks.Hello do
  use Mix.Task

  def run(_) do
    Mix.Task.run("phx.server")
    env = Application.fetch_env!(:phoenix_test, PhoenixTestWeb.Endpoint)
    browser_open("http://#{env[:url][:host]}:#{env[:http][:port]}")
  end
end

然后您可以使用mix hello调用任务。