在 Elixir 项目中,我们通过运行 mix deps.get
获取依赖,如果使用默认的国外镜像源,下载依赖时可能会遇到网络问题。我们可以通过下面的命令查看自己的 Hex 镜像源:
> mix hex.config mirror_url
"https://hexpm.upyun.com"
这里我已经配置成国内镜像源了。
要修改 Hex 镜像源,既可以通过 mix hex.config
命令,也可以通过命令行配置。
> mix hex.config mirror_url https://hexpm.upyun.com
环境变量是 HEX_MIRROR
。其实在 Phoenix入门篇 的“修改镜像源”一节我也介绍了如何配置 Elixir 的镜像源。
除了 mirror_url
,Hex 还有许多其他配置,我们可以通过 mix hex.config
来查看:
> mix hex.config
api_key: nil (default)
api_url: "https://hex.pm/api" (default)
cacerts_path: nil (default)
cache_home: "c:/Users/kaka/.hex" (default)
config_home: "c:/Users/kaka/.hex" (default)
data_home: "c:/Users/kaka/.hex" (default)
debug_solver: false (default)
diff_command: "git diff --no-index __PATH1__ __PATH2__" (default)
http_concurrency: 8 (default)
http_proxy: nil (default)
http_timeout: nil (default)
https_proxy: nil (default)
mirror_url: "https://hexpm.upyun.com" (using `HEX_MIRROR`)
no_proxy: nil (default)
no_short_urls: false (default)
no_verify_repo_origin: false (default)
offline: false (default)
repos_key: nil (default)
resolve_verbose: false (default)
trusted_mirror_url: nil (default)
unsafe_https: false (default)
unsafe_registry: false (default)
以上是 Hex 2.0.6 版本的配置。
Hex配置
api_key
- 访问仓库的API密钥。如果已认证,此配置会覆盖用于认证用户的API密钥。可以通过环境变量HEX_API_KEY
来覆盖。api_url
- Hex API URL。可以通过环境变量HEX_API_URL
来覆盖(默认:"https://hex.pm/api"
),这个URL会返回一些 json 格式的配置,如下:{ "documentation_url": "http://docs.hexpm.apiary.io", "key_url": "https://hex.pm/api/keys/{name}", "keys_url": "https://hex.pm/api/keys", "package_owners_url": "https://hex.pm/api/packages/{name}/owners", "package_release_url": "https://hex.pm/api/packages/{name}/releases/{version}", "package_url": "https://hex.pm/api/packages/{name}", "packages_url": "https://hex.pm/api/packages" }
offline
- 如果设置为true
,Hex将优先使用本地缓存的包(如果可用)。可以通过环境变量HEX_OFFLINE
来覆盖(默认:false
)。unsafe_https
- 如果设置为true
,Hex将不会验证HTTPS证书。可以通过环境变量HEX_UNSAFE_HTTPS
来覆盖(默认:false
)。unsafe_registry
- 如果设置为true
,Hex将不会验证仓库签名与存储库公钥是否匹配。可以通过环境变量HEX_UNSAFE_REGISTRY
来覆盖(默认:false
)。no_verify_repo_origin
- 如果设置为true
,Hex将不会验证仓库源。可以通过环境变量HEX_NO_VERIFY_REPO_ORIGIN
来覆盖(默认:false
)。http_proxy
- HTTP代理。可以通过环境变量HTTP_PROXY
来覆盖。https_proxy
- HTTPS代理。可以通过环境变量HTTPS_PROXY
来覆盖。no_proxy
- 不使用代理的域名名列表,用逗号分隔,支持使用星号作为通配符。可以通过环境变量no_proxy
或NO_PROXY
来覆盖。http_concurrency
- 限制HTTP请求的并发数量。可以通过环境变量HEX_HTTP_CONCURRENCY
来覆盖(默认:8)。http_timeout
- 设置HTTP请求的超时时间(秒)。可以通过环境变量HEX_HTTP_TIMEOUT
来覆盖。mirror_url
- Hex镜像源地址。可以通过环境变量HEX_MIRROR
来覆盖。trusted_mirror_url
- Hex镜像源地址。与mirror_url
不同,这个镜像源是“受信任的”,会发送认证信息等敏感信息到镜像源。可以通过环境变量HEX_TRUSTED_MIRROR
来覆盖。cacerts_path
- CA证书中PEM的文件的路径。如果没有设置,将使用Hex自带的CA证书。可以通过环境变量HEX_CACERTS_PATH
来覆盖。no_short_urls
- 如果设置为true
,Hex将不会使用短链接。可以通过设置环境变量HEX_NO_SHORT_URLS
来覆盖(默认:false
)。
注意官方文档上说
mirror_url
对应的环境变量是HEX_TRUSTED_MIRROR
,其实是笔误,写错了,正确的应该是HEX_MIRROR
。
Hex还支持下面这些额外的环境变量:
HEX_HOME
- Hex存储缓存和配置的目录(默认:~/.hex
)MIX_XDG
- 要求Hex遵循XDG目录规范来设置其主目录和配置文件。HEX_HOME
的优先级高于MIX_XDG
。如果这些变量都没有设置,将使用默认目录~/.hex
。
配置优先级
以上Hex配置部分的所有配置都可以被覆盖。
Hex在计算给定键的值时使用以下优先级顺序:
- 系统环境变量
例如HEX_API_URL
环境变量对于api_url
配置键总是具有最高优先级。 - 项目配置
Hex允许在mix.exs
文件中针对每个项目进行配置。例如,要覆盖api_url
配置,添加以下内容:# mix.exs defmodule MyApp.MixProject def project() do [ # ... deps: deps(), hex: hex() ] end defp hex() do [ api_url: "https://hex.myorg/api" ] end end
- 使用
mix hex.config KEY VALUE
的全局配置 - 默认值
hex.config命令
列出所有配置:
> mix hex.config
获取 KEY 对应的配置:
> mix hex.config KEY
删除 KEY 对应的配置:
> mix hex.config KEY --delete
设置配置:
> mix hex.config KEY VALUE