Mix.Project
Mix.Project
定义和操作Mix项目。
Mix项目通过调用use Mix.Project
模块来定义,通常放置在mix.exs
:
defmodule MyApp.Mixfile do
use Mix.Project
def project do
[
app: :my_app,
version: "1.0.0"
]
end
end
配置
为了配置混合,该模块use
小号Mix.Project
要导出project/0
,返回表示该项目配置的关键字列表功能。
这个配置可以使用读取Mix.Project.config/0
。请注意,config/0
如果项目未定义,则不会失败; 这允许许多Mix任务在没有项目的情况下工作。
如果任务需要定义项目或需要访问项目中的特殊功能,则在没有定义项目的情况下,任务可以调用Mix.Project.get!/0
失败Mix.NoProjectError
。
没有可以返回的所有选项的全面列表,project/0
因为许多Mix任务定义了他们从此配置读取的选项。例如,查看Mix.Tasks.Compile
任务文档中的“配置”部分。
这些只是一个Mix任务不使用的几个选项(因此将在这里进行记录):
:build_per_environment
- 如果true
,构建将是每个环境
。如果无论Mix环境如何false
,构建都会进入_build/shared
。默认为true
。
:aliases
- 任务别名列表。有关更多信息,请查看Mix
模块文档中的“别名”部分。默认为[]
。
:config_path
- 表示主配置文件路径的字符串。查看config_files/0
更多信息。默认为"config/config.exs"
。
:default_task
- 表示mix
未指定任务时要运行的默认任务的字符串。默认为"run"
。
:deps
- 这个项目的依赖列表。Mix.Tasks.Deps
有关更多信息,请参阅该任务的文档。默认为[]
。
:deps_path
- 存储依赖关系的目录。另见deps_path/1
。默认为"deps"
。
:lockfile
-mix deps.*
任务族使用的锁文件的名称。默认为"mix.lock"
。
:preferred_cli_env
-{task, env}
元组的关键字列表,其中task
是作为原子的任务名称(例如:"deps.get"
),并且env
是首选环境(例如:test
)。此选项将覆盖具有该@preferred_cli_env
属性的任务指定的内容(请参阅文档Mix.Task
)。默认为[]
。
有关更多选项,请留意单个Mix任务的文档; 好的例子是Mix.Tasks.Compile
任务和所有特定的编译任务(比如Mix.Tasks.Compile.Elixir
或Mix.Tasks.Compile.Erlang
)。
请注意,有时在文档中提到了针对不同任务的相同配置选项; 这只是因为它很常见的许多任务阅读和使用相同的配置选项(例如,:erlc_paths
所使用的mix compile.erlang
,mix compile.yecc
和其他任务)。
Erlang项目
Mix可以用来管理没有任何Elixir代码的Erlang项目。为了确保Mix任务对Erlang项目正常工作,language: :erlang
必须是返回的配置的一部分project/0
。此设置还可以确保Elixir不会作为依赖项添加到生成的.app
文件或生成的escript中mix escript.build
,依此类推。
摘要
功能
app_path(config \ config())
返回生成中的应用程序路径。
apps_paths(config \ config())
返回带伞子应用程序路径的映射。
build_path(config \ config())
返回给定项目的生成路径。
build_structure(config \ config(), opts \ [])
为给定的应用程序构建项目结构。
compile(args, config \ [])
编译给定的项目。
compile_path(config \ config())
返回给定项目编译到的路径。
config()
返回项目配置。
config_files()
返回此项目的项目配置文件列表。
consolidation_path(config \ config())
返回存储协议合并的路径。
deps_path(config \ config())
返回存储给定项目的依赖项的路径。
deps_paths()
以映射的形式返回所有依赖项的完整路径。
ensure_structure(config \ config(), opts \ [])
确保给定项目的项目结构存在。
get()
如果有当前项目,则检索当前项目。
get!()
同get/0
,但如果没有当前项目,则会引发异常。
in_project(app, path, post_config \ [], fun)
运行给定的fun
在给定的项目中
load_paths(config \ config())
返回给定项目的所有加载路径。
manifest_path(config \ config())
返回存储清单的路径。
umbrella?(config \ config())
如果config
是伞项目的配置,则返回true
功能
app_path(config \ config())
app_path(keyword) :: Path.t
返回生成中的应用程序路径。
返回的路径将被展开。
实例
Mix.Project.app_path
#=> "/path/to/project/_build/shared/lib/app"
apps_paths(config \ config())
返回带伞子应用程序路径的映射。
这些路径基于:apps_path
和:apps
配置。
如果给定的项目配置标识雨伞项目,返回值是地图上app => path哪里app是伞的孩子应用程序,path是其路径相对于伞项目的根。
如果给定的项目配置没有标识伞式项目,nil
会被归还。
实例
Mix.Project.apps_paths()
#=> %{my_app1: "apps/my_app1", my_app2: "apps/my_app2"}
build_path(config \ config())
build_path(keyword) :: Path.t
返回给定项目的生成路径。
如果未给出配置,则使用当前项目的配置。
返回的路径将被展开。
实例
Mix.Project.build_path
#=> "/path/to/project/_build/shared"
如果:build_per_environment
设置为true
,它将为每个环境创建一个新的构建:
Mix.env
#=> :dev
Mix.Project.build_path
#=> "/path/to/project/_build/dev"
build_path(config \ config())
build_structure(keyword, keyword) :: :ok
为给定的应用程序构建项目结构。
备选方案
:symlink_ebin
-符号链接Ebin而不是复制它
compile(args, config \ [])
compile([term], keyword) :: term
编译给定的项目。
compile_path(config \ config())
compile_path(keyword) :: Path.t
返回给定项目编译到的路径。
如果未给出配置,则将使用当前项目的配置。
返回的路径将被展开。
实例
Mix.Project.compile_path
#=> "/path/to/project/_build/dev/lib/app/ebin"
config()
config() :: keyword
返回项目配置。
如果没有定义项目,它仍会返回一个带有默认值的关键字列表。这使得许多Mix任务可以工作,而不需要基础项目。
注意,一旦将项目推送到堆栈上,此配置将被缓存。多次调用它不会导致重新计算它。
不要Mix.Project.config/0
用来查找运行时配置。仅将它用于配置项目的各个方面(如编译目录),而不是您的应用程序运行时。
config_files()
config_files() :: [Path.t]
返回此项目的项目配置文件列表。
此函数通常用于编译任务,以便每当此类配置文件更改时触发完全重新编译。
它返回mix.exs
文件,锁清单以及config
目录中所有不以尾部句号开头的配置文件(例如,.my_config.exs
)。
consolidation_path(config \ config())
返回存储协议合并的路径。
返回的路径将被展开。
实例
Mix.Project.consolidation_path
#=> "/path/to/project/_build/dev/lib/my_app/consolidated"
雨伞内:
Mix.Project.consolidation_path
#=> "/path/to/project/_build/dev/consolidated"
deps_path(config \ config())
deps_path(keyword) :: Path.t
返回存储给定项目的依赖项的路径。
如果未给出配置,则使用当前项目的配置。
返回的路径将被展开。
实例
Mix.Project.deps_path
#=> "/path/to/project/deps"
deps_paths()
deps_paths() :: %{optional(atom) => Path.t}
将所有依赖项的完整路径作为映射返回。
实例
Mix.Project.deps_paths
#=> %{foo: "deps/foo", bar: "custom/path/dep"}
ensure_structure(config \ config(), opts \ [])
ensure_structure(keyword, keyword) :: :ok
确保给定项目的项目结构存在。
如果它真的存在的话,它是不存在的。否则,它就是建造的。
get()
get() :: module | nil
检索当前项目(如果有)。
如果没有当前的项目,nil
会被归还。在当前目录中没有混合文件的情况下可能会发生这种情况。
如果您希望定义一个项目,即它是当前任务的一个要求,则应该调用get!/0
相反。
get!()
get!() :: module | no_return
与之相同get/0
,但在没有当前项目的情况下引发异常。
这通常由需要定义项目的附加功能的任务调用。由于这些任务通常依赖于定义的项目,因此Mix.NoProjectError
如果没有项目可用,此功能会引发异常。
in_project(app, path, post_config \ [], fun)
in_project(atom, Path.t, keyword, (module -> result)) :: result when result: term
运行给定的fun
在给定的项目中。
此函数更改当前工作目录,并将给定目录下的项目加载到项目堆栈中。
post_config
可以通过将被合并到项目配置中。
fun
用给定的模块名称调用Mix.Project
。这个函数的返回值是返回值fun
。
实例
Mix.Project.in_project :my_app, "/path/to/my_app", fn module ->
"Mixfile is: #{inspect module}"
end
#=> "Mixfile is: MyApp.Mixfile"
load_paths(config \ config())
load_paths(keyword) :: [Path.t]
返回给定项目的所有加载路径。
manifest_path(config \ config())
manifest_path(keyword) :: Path.t
返回存储清单的路径。
默认情况下,它们存储在构建目录内的app路径中。伞式应用程序将清单路径设置为构建目录的根目录。目录可能在以后的版本中被更改。
返回的路径将被展开。
实例
Mix.Project.manifest_path
#=> "/path/to/project/_build/shared/lib/app"
umbrella?(config \ config())
如果config
是伞项目的配置,则返回true
。
当没有参数调用时,告诉当前项目是否是一个综合项目。