如何从根目录执行mix run --no-halt运行子目录中的Elixir应用?
从根目录运行单个/部分Elixir应用的方法
当然可以做到!我给你两种实用的方案,根据你的使用场景选择就行:
方案一:直接指定应用目录执行命令
如果只是临时需要从根目录运行某个应用,不用改任何目录结构,直接用下面的命令就行:
方法A(适用于较新版本的Mix)
Mix支持--working-dir参数来指定工作目录,在根目录执行:
mix run --no-halt --working-dir ./my_first_app
这样Mix会自动切换到my_first_app目录下执行命令,当前shell的工作目录不会改变。
方法B(兼容所有Mix版本)
如果你的Mix版本不支持--working-dir,可以用shell的子命令来实现:
(cd ./my_first_app && mix run --no-halt)
括号的作用是让cd命令只在子shell中生效,执行完后你依然留在根目录。
方案二:转为Umbrella项目(长期管理更优雅)
如果需要频繁管理这些应用,把根目录改成Umbrella项目是更好的选择,步骤如下:
- 在根目录初始化Umbrella项目:
mix new . --umbrella
(注意末尾的.表示在当前目录创建,而不是新建子目录)
- 移动现有应用到Umbrella的
apps目录:
Umbrella项目默认会把所有子应用放在apps文件夹下,所以执行:
mkdir apps mv my_first_app apps/ mv my_second_app apps/
- 现在就能在根目录灵活运行单个或多个应用了:
- 运行单个应用:
mix run --no-halt --only my_first_app
- 运行多个指定应用:
mix run --no-halt --only my_first_app,my_second_app
- 如果不添加
--only参数,默认会运行所有子应用。
Umbrella项目的好处是可以统一管理所有子应用的依赖、测试等,同时每个应用依然保持独立的配置和代码结构。
内容的提问来源于stack exchange,提问作者Georgy Savva
相关产品推荐
相关产品推荐

