博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
elixir mix 简介
阅读量:6626 次
发布时间:2019-06-25

本文共 4350 字,大约阅读时间需要 14 分钟。

概述

mix 是 elixir 工程的构建工具,利用 mix,可以快速方便的创建 elixir 工程,写单元测试,管理 elixir 包的依赖管理等等。

我觉得刚开始学习 elixir 的时候,先简单看看 mix 的用法,也方便学习中写些 elixir 的小例子。

本文环境基于:

$ elixir -vErlang/OTP 18 [erts-7.2.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]Elixir 1.2.1$ mix -vMix 1.2.1

使用 mix 管理 elixir 工程

mix 支持很多子命令,可以通过 mix help 来查看。

下面只介绍一些常用的子命令,使得可以在学习 elixir 的过程中,做些简单的代码实验即可。

创建工程

学习 elixir 的过程中,难免会写些代码来试验语言的特性。

虽然写个 exs 的脚本也行,但是将所有的试验代码通过一个工程来管理,不仅方便以后查看,也方便试验的时候复用代码。

所以,首先要看看如何使用 mix 来创建一个 elixir 工程。

$ mix new sample* creating README.md* creating .gitignore* creating mix.exs* creating config* creating config/config.exs* creating lib* creating lib/sample.ex* creating test* creating test/test_helper.exs* creating test/sample_test.exsYour Mix project was created successfully.You can use "mix" to compile it, test it, and more:    cd sample    mix testRun "mix help" for more commands.

通过 new 子命令,即可以创建工程,工程的目录结构如下:

.├── README.md               # 默认的工程说明文件,可以根据工程添加自己的内容├── config                  # 工程中使用的各个package的配置,具体说明可以看 config.exs 中的注释说明│   └── config.exs├── lib                     # 真正实现功能或者试验的代码放在这个文件夹中,默认生成一个空的示例│   └── sample.ex├── mix.exs                 # 整个工程的配置文件,里面包含工程名称,版本,依赖关系等等。mix 工具就是依靠此文件来编译工程的└── test                    # 单元测试代码放在此文件夹中,默认生成一个空的测试文件    ├── sample_test.exs     # 文件名称对应 lib 中的代码文件    └── test_helper.exs     # 默认只有一行启动测试的代码,可以根据需要扩充(比如加一些共通的测试前处理,后处理等)

编译,运行工程

工程创建了之后,就可以开始写 elixir 的代码,体验 elixir 的特别之处了。

为了试验 mix 的编译,首先在 lib/sample.ex 中加入一段简单的代码:

defmodule Sample do  def hello do    IO.puts "hello Elixir"  endend

然后编译工程:

$ mix compileCompiled lib/sample.exGenerated sample appConsolidated List.CharsConsolidated String.CharsConsolidated CollectableConsolidated EnumerableConsolidated IEx.InfoConsolidated Inspect$ ls -ltotal 16-rw-r--r--  1 xxxxxx  staff  399  2 17 22:08 README.mddrwxr-xr-x  3 xxxxxx  staff  102  2 17 22:30 _builddrwxr-xr-x  3 xxxxxx  staff  102  2 17 22:08 configdrwxr-xr-x  3 xxxxxx  staff  102  2 17 22:29 lib-rw-r--r--  1 xxxxxx  staff  665  2 17 22:08 mix.exsdrwxr-xr-x  4 xxxxxx  staff  136  2 17 22:08 test

编译的结果就在 _build 文件夹中。

运行工程也很简单:

$ iex -S mixErlang/OTP 18 [erts-7.2.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]Interactive Elixir (1.2.1) - press Ctrl+C to exit (type h() ENTER for help)iex(1)> Sample.hellohello Elixir:ok

单元测试

单元测试是确保代码质量的重要手段,mix 创建的工程也规定了单元测试的规则。

针对上面的简单代码,我们可以在 test 目录中对应的测试文件 samle_test.exs 中添加测试代码:

defmodule SampleTest do  use ExUnit.Case  doctest Sample  test "case01" do    assert :ok == Sample.hello  end  test "case02" do    assert :ng == Sample.hello  endend

运行单元测试非常简单:

$ mix testhello Elixir.hello Elixir  1) test case02 (SampleTest)     test/sample_test.exs:9     Assertion with == failed     code: :ng == Sample.hello()     lhs:  :ng     rhs:  :ok     stacktrace:       test/sample_test.exs:10Finished in 0.07 seconds (0.07s on load, 0.00s on tests)2 tests, 1 failureRandomized with seed 537919

从输出的内容中可以看出,case01 成功,case02 失败,与预期的是一致的。

编译二进制文件

上面的示例中,是通过 iex -S mix 来运行工程的,这种方式一般用于运行一个库。

我们也可以将工程编译成一个二进制文件,可以分发到所有安装 OTP 环境的系统中运行。
这时,我们需要一个 main 函数。
修改 lib/sample.ex 中的代码如下:

defmodule Sample do  def main(args \\ []) do    IO.puts "hello "    IO.puts args  endend

为了编译二进制,设置 mix.exs 如下:

def project do  [app: :sample,   version: "0.0.1",   elixir: "~> 1.2",   escript: escript,                            # 追加 escript 配置   build_embedded: Mix.env == :prod,   start_permanent: Mix.env == :prod,   deps: deps]enddef escript do                                  # 追加 escript 函数,其中设置 main_module  [main_module: Sample]end

编译二进制:

$ mix escript.buildCompiled lib/sample.exGenerated sample appConsolidated List.CharsConsolidated CollectableConsolidated String.CharsConsolidated EnumerableConsolidated IEx.InfoConsolidated InspectGenerated escript sample with MIX_ENV=dev$ ls -ltotal 4824-rw-r--r--  1 xxxxxx  staff      399  2 17 22:08 README.mddrwxr-xr-x  4 xxxxxx  staff      136  2 17 23:08 _builddrwxr-xr-x  3 xxxxxx  staff      102  2 17 22:08 configdrwxr-xr-x  3 xxxxxx  staff      102  2 17 23:31 lib-rw-r--r--  1 xxxxxx  staff      738  2 17 23:28 mix.exs-rwxr-xr-x  1 xxxxxx  staff  2460249  2 17 23:28 sample          # 此为二进制文件drwxr-xr-x  4 xxxxxx  staff      136  2 17 23:09 test$ ./samplehello$ ./sample "Elixir"helloElixir

转载于:https://www.cnblogs.com/wang_yb/p/5196884.html

你可能感兴趣的文章
解决IE6-IE7下li上下间距
查看>>
聚集索引更新后会不会马上重新排序
查看>>
幸运大抽奖
查看>>
Post请求
查看>>
labview 中activex的初步使用方法
查看>>
JSP与JavaBeans
查看>>
解决Android中TextView首行缩进的问题
查看>>
oracle 查询哪些表分区
查看>>
Java排序算法(三):直接插入排序
查看>>
Python 列表 min() 方法
查看>>
C语言中 Float 数据结构的存储计算
查看>>
HSF源码阅读
查看>>
【死磕jeesite源码】Jeesite配置定时任务
查看>>
程序8
查看>>
TBluetoothLEDevice.UpdateOnReconnect
查看>>
QtTableView 简介
查看>>
Liferay 6开发学习(二十六):数据库连接相关问题
查看>>
【20170506】贝业新兄弟IT总监李济宏:第三方家居物流的IT架构探索
查看>>
poj3517
查看>>
iphone http下载文件
查看>>