有没有一种正确的方法可以将非伞式项目更改为在 Phoenix 框架中使用伞式功能?

Is there a right way to change a non umbrella project to use umbrella feature with Phoenix framework?

现在正在使用 Phoenix 框架。一开始,我们没有使用 --umbrella 选项来生成项目。所以结构就像一个简单的伞式应用程序。

现在想把项目改成umbrella方式。可以吗,怎么办?

从 phoenix 1.3 和 elixir 1.5 开始:

在单独的目录中生成一个新的保护伞应用程序:

$ mix new my_umbrella --umbrella

将您的 phoenix 应用程序移动到新伞目录中的 apps/ 目录:

$ mv /path/to/my_app /path/to/my_umbrella/apps/

您的构建路径、deps 文件夹以及主要配置和混合文件现在位于伞的根目录中。您需要将以下几行添加到您的凤凰 mix.exs 中的 project 函数以指向正确的位置,如下所示:

# my_umbrella/apps/my_app/mix.exs

def project do
  [
    # ...

    build_path: "../../_build",
    config_path: "../../config/config.exs",
    deps_path: "../../deps",
    lockfile: "../../mix.lock",

    # ...
  ]
end

从伞的根重新获取您的依赖项。

$ mix deps.get

假设您使用的是 b运行ch,您还需要编辑 phoenix 应用程序文件夹中的 assets/package.json 文件以指向 deps/ 的正确位置:

// my_umbrella/apps/my_app/assets/package.json
"phoenix": "file:../../../deps/phoenix",
"phoenix_html": "file:../../../deps/phoenix_html"

如果使用 npm.

的最新版本,您可能需要刷新 package-lock.json 文件以重新执行 运行 npm install 命令

从 umbrella 的根目录,你应该可以启动你的 phoenix 服务器。

$ mix phx.server