概述

mix 是 elixir 工程的构建工具,利用 mix,可以快速方便的创建 elixir 工程,写单元测试,管理 elixir 包的依赖管理等等。
我觉得刚开始学习 elixir 的时候,先简单看看 mix 的用法,也方便学习中写些 elixir 的小例子。

本文环境基于:

$ elixir -v
Erlang/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 -v
Mix 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 samplemix 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 dodef hello doIO.puts "hello Elixir"end
end

然后编译工程:

$ mix compile
Compiled lib/sample.ex
Generated sample app
Consolidated List.Chars
Consolidated String.Chars
Consolidated Collectable
Consolidated Enumerable
Consolidated IEx.Info
Consolidated Inspect$ ls -l
total 16
-rw-r--r--  1 xxxxxx  staff  399  2 17 22:08 README.md
drwxr-xr-x  3 xxxxxx  staff  102  2 17 22:30 _build
drwxr-xr-x  3 xxxxxx  staff  102  2 17 22:08 config
drwxr-xr-x  3 xxxxxx  staff  102  2 17 22:29 lib
-rw-r--r--  1 xxxxxx  staff  665  2 17 22:08 mix.exs
drwxr-xr-x  4 xxxxxx  staff  136  2 17 22:08 test

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

运行工程也很简单:

$ iex -S mix
Erlang/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.hello
hello Elixir
:ok

单元测试

单元测试是确保代码质量的重要手段,mix 创建的工程也规定了单元测试的规则。
针对上面的简单代码,我们可以在 test 目录中对应的测试文件 samle_test.exs 中添加测试代码:

defmodule SampleTest douse ExUnit.Casedoctest Sampletest "case01" doassert :ok == Sample.helloendtest "case02" doassert :ng == Sample.helloend
end

运行单元测试非常简单:

$ mix test
hello Elixir
.hello Elixir1) test case02 (SampleTest)test/sample_test.exs:9Assertion with == failedcode: :ng == Sample.hello()lhs:  :ngrhs:  :okstacktrace: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 dodef main(args \\ []) doIO.puts "hello "IO.puts argsend
end

为了编译二进制,设置 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.build
Compiled lib/sample.ex
Generated sample app
Consolidated List.Chars
Consolidated Collectable
Consolidated String.Chars
Consolidated Enumerable
Consolidated IEx.Info
Consolidated Inspect
Generated escript sample with MIX_ENV=dev$ ls -l
total 4824
-rw-r--r--  1 xxxxxx  staff      399  2 17 22:08 README.md
drwxr-xr-x  4 xxxxxx  staff      136  2 17 23:08 _build
drwxr-xr-x  3 xxxxxx  staff      102  2 17 22:08 config
drwxr-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$ ./sample
hello$ ./sample "Elixir"
hello
Elixir

转载于:https://my.oschina.net/u/1443459/blog/830703

elixir mix 简介相关推荐

  1. Elixir应用简介

    在我以前的文章中,我们讨论了各种Elixir术语,并编写了大量代码. 但是,我们尚未讨论的是如何组织和组织代码,以便于维护和发布. 应用程序对于Erlang和Elixir来说非常常见,并用于构建充当独 ...

  2. Erlang和Elixir简介

    Elixir是一种快速,动态和可扩展的语言,已Swift被初创企业人群和已建立企业的生产应用所采用. 仅举几例,Pinterest,Brightcove,Discord和Canvas都在Elixir上 ...

  3. linux deliver分发管理,Erlang/Elixir: 使用 Edeliver 进行自动化的持续部署

    增加 2016-08-19 Erlang/Elixir: 用Distillery替换Exam打包器 更新 2016-07-25 这里有一篇Gitbooks上的文章专门简介如何搭建,配置一个Phoeni ...

  4. MQTT 在 Elixir 中的应用

    简介 最近读到一本好书,书名是<通过 Elixir 和 Nerves 搭建气象站>, 书中介绍了如何引入 Elixir 作为构建嵌入式应用程序的工具. 通过使用 Nerves,我们可以在支 ...

  5. Elixir 1.2带来多项功能增强和性能提升

    José Valim宣布了Elixir这门动态.函数式编程语言的1.2版本. \\ Valim是Elixir的创建者.他表示,1.2版本"带来了功能增强.Bug修复.性能提升等等" ...

  6. 使用 Elixir 开发嵌入式系统: 使用DS18B20传感器测量体温

    文本, 我会使用一个Elixir实现的模块函数去读取连接到树莓派的DS18B20温度传感器的温度数值. 文本假设你熟悉 数字电路基础 Elixir编程基础 视频演示 https://v.qq.com/ ...

  7. Elixir: 开发和发布Elixir库

    创建 Elixir 项目 $ mix new simple_statistics $ cd simple_statistics $ mix test Mix 生成了如下目录结构 |-- _build ...

  8. Elixir 1.3带来新的语言功能、API和改进后的工具

    José Valim最近宣布Elixir 1.3中弃用了必要赋值,添加了一些新的类型和存取器,提升了其Mix搭建工具和ExUnit单元测试框架. \\ Elixir 1.3弃用了对需要在外部作用域进行 ...

  9. [elixir! #0037] Agent 小传

    elixir! #0041 前言 Agent 是 elixir 中引入的一个新的抽象. 它建立在 GenServer 之上,它的 实现非常简单.基本的机制就是 agent 进程接收一个函数, 然后对它 ...

最新文章

  1. 中大李文均团队在氮循环功能基因的生物地理学分布格局研究中取得进展
  2. Python 工匠:在边界处思考
  3. NYOJ 906 杨辉三角
  4. Mybatis工作流程,附带mybatis的mapper文件和config配置文件模板。mapper文件和dao接口的关系——xml中的namespace和sql标签id命名要求。
  5. php 调用扫描仪,如何从浏览器中触发扫描仪?
  6. Call for Papers | 2019 年 IEEE 国际进化计算大会
  7. 我常用的Markdown公式符号
  8. WordPress电影资源下载主题:zmovie
  9. python查找指定文件夹_python实现在目录中查找指定文件的方法
  10. sql文件建立mysql库_使用.SQL文件创建MySQL数据库
  11. 第一章:了解SQL_数据库基础
  12. 13凯越门锁继电器在哪里_汽车中控保险丝在哪里_汽车一年保险费_保险频道
  13. 吴恩达神经网络和深度学习-学习笔记-37-inception网络
  14. 基于OleDb的Excel数据访问
  15. Django 优秀资源大全
  16. 【SSL】2021-08-17 1285.砍伐树木
  17. Echarts 地图中地点轮播
  18. 程序员:打死不找产品当女友,哪怕长得像天仙???丨黑马头条
  19. 上海地铁二号线各车站换乘和时刻表
  20. c语言switch怎么判断字符,c语言switch语句如何使用

热门文章

  1. CRC-16/MODBUS的高低位之说
  2. jQuery超详细入门教程
  3. 手机黑名单,拦截电话和短信,清除通话记录
  4. 如何将图片批量压缩?全面盘点这几种小方法
  5. ubuntu 中w指令中的IDLE是什么意思
  6. Godaddy 主机域名的购买、注册和使用
  7. 如何安装Java JDK
  8. 查看MySQL的安装路径
  9. 从CSDN博客到出书,我的新书《SQL编程思想》是这样诞生的
  10. linux C 编程入门