在创建新的 Mix 项目期间 "main module" 的目的是什么?
What is the purpose of the "main module" during a new Mix project creation?
据我所知(我可能是错的,因为我是 Elixir 的新手),可以选择创建一个包含多个 .ex 文件的单一应用程序 Mix 项目,每个文件中包含多个模块。它们可以通过别名、导入等在彼此内部使用
如果是这样,创建期间 "main module" 的目的是什么,是隐式(大写项目名称)还是显式(如 mix new ... --module <modulename>
)?
PS:我知道 escripts 需要在 mix.exs
中指定一个主模块,但这不是我在我的问题中所指的(或者我是?)。
据我了解,这只是在您的新项目中有一个经过测试的示例模块。但是,很多时候,将此 "main module" 设为其他 Elixir 代码与应用程序交互的 API 边界是有意义的。
一个Elixir系统可能由很多应用组成,可以是你自己的应用,也可以是third-party个应用,包括库。把应用看成是一个组件,一个"box"相关代码,其实很多lib都是应用。
主模块是您放置所有将被其他应用程序使用的 public 函数的地方,换句话说,就是您的应用程序的 public API。看一下像 Jason 这样的库,您会看到这种模式,例如:https://github.com/michalmuskala/jason/blob/master/lib/jason.ex
但是如果你是基于 Phoenix 构建一个没有分布式应用程序的应用程序,你可能不会在主模块中有任何代码,尽管我建议你阅读与这个主题相关的 https://hexdocs.pm/phoenix/contexts.html并且会让你有更深刻的理解。
据我所知(我可能是错的,因为我是 Elixir 的新手),可以选择创建一个包含多个 .ex 文件的单一应用程序 Mix 项目,每个文件中包含多个模块。它们可以通过别名、导入等在彼此内部使用
如果是这样,创建期间 "main module" 的目的是什么,是隐式(大写项目名称)还是显式(如 mix new ... --module <modulename>
)?
PS:我知道 escripts 需要在 mix.exs
中指定一个主模块,但这不是我在我的问题中所指的(或者我是?)。
据我了解,这只是在您的新项目中有一个经过测试的示例模块。但是,很多时候,将此 "main module" 设为其他 Elixir 代码与应用程序交互的 API 边界是有意义的。
一个Elixir系统可能由很多应用组成,可以是你自己的应用,也可以是third-party个应用,包括库。把应用看成是一个组件,一个"box"相关代码,其实很多lib都是应用。
主模块是您放置所有将被其他应用程序使用的 public 函数的地方,换句话说,就是您的应用程序的 public API。看一下像 Jason 这样的库,您会看到这种模式,例如:https://github.com/michalmuskala/jason/blob/master/lib/jason.ex
但是如果你是基于 Phoenix 构建一个没有分布式应用程序的应用程序,你可能不会在主模块中有任何代码,尽管我建议你阅读与这个主题相关的 https://hexdocs.pm/phoenix/contexts.html并且会让你有更深刻的理解。