【发布时间】:2017-09-06 13:53:15
【问题描述】:
如果您熟悉 Rails,引擎插件中有 test/dummy rails 应用程序,用于测试等。
我将如何在我的库中包含类似的内容?我需要那个 phoenix 应用程序,这样我就可以使用从 Ecto 模型呈现一些数据的视图。我不希望那个虚拟应用程序与我的库的其余部分一起编译。从技术上讲,我可以制作一个单独的 repo,但我想知道有没有更好的方法。
【问题讨论】:
如果您熟悉 Rails,引擎插件中有 test/dummy rails 应用程序,用于测试等。
我将如何在我的库中包含类似的内容?我需要那个 phoenix 应用程序,这样我就可以使用从 Ecto 模型呈现一些数据的视图。我不希望那个虚拟应用程序与我的库的其余部分一起编译。从技术上讲,我可以制作一个单独的 repo,但我想知道有没有更好的方法。
【问题讨论】:
如果纯粹出于开发目的,最好在伞模式下创建一个 Phoenix 应用程序并将您的库添加为普通伞子应用程序。
这样,您可以使用 Phoenix,但它与您的 lib 完全解耦,只是像任何其他用户一样使用您的 lib 作为依赖项。
设置它的示例命令:
mix phx.new my_lib_dev --umbrella
cd my_lib_dev_umbrella/apps
mix new my_lib
然后在my_lib_dev_umbrella/apps/my_lib_dev_web/mix.exs 中,您可以使用{:my_lib, in_umbrella: true} 添加您的库作为依赖项。
现在您可以在 my_lib_dev_umbrella/apps/my_lib 中开发您的库,与 Phoenix 本身完全解耦,但您的 Phoenix 设置将其作为依赖项包含在内,并且其行为方式与用户从 Hex 中提取的一样。
如果您不熟悉雨伞设置,可以在此处阅读更多相关信息: Umbrella Projects · Elixir School
【讨论】:
my_lib_dev_umbrella/apps/my_lib 是您推送到 GitHub 并在 Hex 上发布的整个库。周围的一切都只是开发的辅助设置。
elixirc_paths 键是project 方法。也许只需将dummy 保留在根文件夹中并从那里链接lib 就不会那么麻烦了。