一个简单的基于关键字的配置API。
例子
该模块通常用于定于应用配置,通常在 config/config.exs
中:
import Config
config :some_app,
key1: "value1",
key2: "value2"
import_config "#{config_env()}.exs"
import Config
会导入 config/2
, config/3
, config_env/0
, config_target/0
和 import_config/1
函数来帮助你管理配置。
config/2
和 config/3
用来为指定应用定义键值对配置。当 Mix 启动时,它会自动解析配置文件并将上述配置持久化到 :some_app
的应用环境中,然后你可以通过以下方式访问:
"value1" = Application.fetch_env!(:some_app, :key1)
最后, import_config "#{config_env()}.exs"
会根据配置的环境导入其他配置文件,如 config/dev.exs
和 config/test.exs
。
Config
在 Config.Reader
模块下也提供了用于解析和读取配置的低级API。
避免在库中使用应用环境
如果你在编写供其他开发者调用的库,通常建议避免使用应用环境,因为应用环境是一个全局存储。同时注意,当库作为依赖时,config/config.exs
不会被解析,因为配置文件的含义是配置当前项目。
从 use Mix.Config
升级
Elixir的 Config
模块在 v1.9 引入,作为 Mix.Config
的替代,它专用于Mix且已弃用。
你可以分3步将 Mix.Config
替换成 Config
。第一步是在配置文件顶部将 use Mix.Config
替换成 import Config
。
第二步确保你的 import_config/1
调用没有通配符。如果有,你需要手动查找通配符,例如:
import_config "../apps/*/config/config.exs"
需要被替换成:
for config <- "../apps/*/config/config.exs" |> Path.expand(__DIR__) |> Path.wildcard() do
import_config config
end
最后一步是将所有的 Mix.env()
调用替换成 config_env()
。
注意,工程文件中也不能使用 Mix.env()
。要在运行时查看环境可以添加以下配置:
# config.exs
...
config :my_app, env: config_env()
你只能在 mix.exs
文件和自定义Mix任务内访问 Mix
模块中的函数,这些都在 Mix.Tasks
命名空间内。
config/runtime.exs
对于运行时配置,可以使用 config/runtime.exs
文件。它在应用启动前执行,无论是通过 Mix 启动还是打包发布。