背景
我正在尝试使用 Phoenix LiveView 创建桌面应用程序。现在,以某种用户友好的方式(至少我知道的唯一方式)执行此操作的唯一方法是启动我的 Phoenix 应用程序/服务器,然后在客户端机器中打开浏览器窗口。
这就是诀窍。在客户端机器上打开浏览器窗口。
代码
通过查看其他强大的 Elixir 程序员的一些 github 存储库,我能够获取一段可以完成这项工作的代码。
演示/lib/demo/application.ex
defmodule Demo.Application do
@moduledoc false
use Application
def start(_type, _args) do
children = [
DemoWeb.Telemetry,
{Phoenix.PubSub, name: Demo.PubSub},
DemoWeb.Endpoint
]
opts = [strategy: :one_for_one, name: Demo.Supervisor]
result = Supervisor.start_link(children, opts)
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, ["http://localhost:4000"])
else
Mix.raise "Command not found: #{start_browser_command}"
end
result
end
def config_change(changed, _new, removed) do
DemoWeb.Endpoint.config_change(changed, removed)
:ok
end
end
这应该是先启动Phoenix App ,然后再打开窗口。
问题
所以,这段代码让我感觉有点不舒服,具体原因是:我的印象是该start
功能应该只用于启动我的凤凰服务器,而不是用于其他任何事情。
但随之而来的问题是:
- 如果该
start
功能的工作只是启动应用程序,那么执行其他任务的正确/最佳位置是什么,例如打开浏览器的窗口或在应用程序启动后执行一些准备工作?