Pages

Monday, 29 August 2016

Elixir的umbrella project

为什么要有umbrella project?

Mix提供了相当完善的应用管理(elixir中所谓应用有点像是其它语言中的)。由于elixir中
一个应用的粒度比较小,如果任由每个应用分开管理,则随着项目复杂度的逐渐增大,应用之间的依赖
关系也将失去控制。为了能妥善地管理应用之间的依赖,Mix专门推出一个专门用来管理应用的project
类型,名字就叫作umbrella。
实际中一个应用的规模能有多大?由于没有这一方面的经验,所以只能大概猜测。从目前的代码实例来看
elixir并不鼓励大的应用,每一个应用的尺寸都很小。

如何创建umbrella project?

umbrella projectr的创建还是相当简单的,只需要在命令行输入如下命令:
mix new project_name --umbrella
需要把上面命令行中的project_name替换成相应的工程名称
umbrella_project/mix.exs文件是和正常工程的mix.exs文件有点不同的。不同之处在于没有app
option,取而代之的是apps_path option。apps_path option其实是指向了该umbrella
project所管理的子应用的路径。

在umbrella project中创建新的project

umbrella工程创建完成之后,就可以该工程之下创建实际的工作工程了。比如我想创建一个空的kv工程只需
要在命令行输入如下命令:
cd umbrella_project\apps
mix new kv --module KV --sup
可以看出和正常的创建过程是一样的,不同点有以下两点:
  • 需要首先进入到apps目录下面,这是umbrella工程默认的保存所有应用的地方
  • MIX可以分辨出当前的kv工程是在umbrella project之下,会在apps/kv/mix.exs文件的project
    函数中加入以下的options:
    build_path: "../../_build",
    config_path: "../../config/config.exs",
    deps_path: "../../deps",
    lockfile: "../../mix.lock",