1

mix 是什么?

mix 是一个用于Elixir项目打包,编译,测试的工具,类似Leiningen 之于clojure,mix是由lein项目中的一位contributor写的,可以使用mix创建项目,安装依赖,会非常方便。

创建一个项目

使用mix new 命令创建一个新项目,比如创建一个项目叫my_project

$ mix new my_project --bare

mix为我们创建了项目的基本骨架。

.gitignore
README.md
mix.exs
lib/my_project.ex
test/test_helper.exs
test/my_project_test.exs

项目文件作用介绍:

mix.exs

这个文件是项目的配置文件,内容如下

defmodule MyProject.Mixfile do
  use Mix.Project

  def project do
    [app: :my_project,
     version: "0.0.1",
     deps: deps]
  end

  # Configuration for the OTP application
  def application do
    []
  end

  # Returns the list of dependencies in the format:
  # {:foobar, git: "https://github.com/elixir-lang/foobar.git", tag: "0.1"}
  #
  # To specify particular versions, regardless of the tag, do:
  # {:barbat, "~> 0.1", github: "elixir-lang/barbat"}
  defp deps do
    []
  end
end

这个文件里主要有两个函数projectapplication,其中project包含项目的版本,Elixir依赖版本等,application 主要用于生成一个Erlang应用,可以被Erlang运行时管理。

lib/my_project.ex

主模块定义

defmodule MyProject do
end

test/my_project_test.exs

测试相关,注意扩展名是exs,表示这是Elixir的脚本文件,因为我们运行测试程序不需要编译。

defmodule MyProjectTest do
  use ExUnit.Case

  test "the truth" do
    assert true
  end
end

定义了MyProjectTest这个模块,并使用了ExUnit.Case,并定义了一个简单的测试用例

Exunit 是Elixir的一个单元测试框架

test/test_helper.exs

此文件就一行代码,ExUnit.start用于对框架做一些设置,每次测试执行,这个文件都会被require

ExUnit.start

项目创建完,下一步就是写代码了!

其它

查看帮助

$ mix help

会打印所有的task,进一步查看 mix help TASK

依赖管理

Mix可以帮我们管理包依赖,下面的deps函数定义了依赖包:

def project do
  [app: :my_project,
   version: "0.0.1",
   deps: deps]
end

defp deps do
  [{:some_project, ">= 0.3.0"},
   {:another_project, git: "https://example.com/another/repo.git", tag: "v1.0.2"}]
end

Mix支持Git库,如果不是Git, 使用Hex的话默认是从hex.pm下载包。

版本号支持>=, <=, >, ==操作符对版本限制

也支持and or

">= 2.0.0 and < 2.1.0"

等价于

"~> 2.0.0"

依赖处理 task

  • mix deps - 列出依赖状态
  • mix deps.get - 获取所有依赖;
  • mix deps.compile - 编译;
  • mix deps.update - 更新依赖包;
  • mix deps.clean - 删除依赖文件;
  • mix deps.unlock - 锁定依赖版本;

lidashuang
6.7k 声望165 粉丝

$ Ruby/Elixir/Golang