elixir mix 简介

简介:

概述

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.exs

Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:

    cd sample
    mix test

Run "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"
  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 do
  use ExUnit.Case
  doctest Sample

  test "case01" do
    assert :ok == Sample.hello
  end

  test "case02" do
    assert :ng == Sample.hello
  end
end

运行单元测试非常简单:

$ mix test
hello 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:10



Finished in 0.07 seconds (0.07s on load, 0.00s on tests)
2 tests, 1 failure

Randomized 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
  end
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]
end

def 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
标签:  elixir



本文转自wang_yb博客园博客,原文链接:http://www.cnblogs.com/wang_yb/p/5196884.html,如需转载请自行联系原作者

目录
相关文章
|
编译器 Swift iOS开发
44 Swift和Objective-C的运行时简介
Swift和Objective-C的运行时简介
102 0
|
4月前
|
Shell Go
Go 语言Air 工具使用入门
在Go开发中,频繁的手动重启应用以加载新代码既耗时又低效。为此,我们引入了Air——一款专为Go项目设计的自动重载工具。Air通过监听文件变化,实现代码更改后的自动编译与运行,极大提升了开发效率。本文将指导你完成Air的安装与配置,包括如何启动Air、忽略临时文件以及理解其工作原理,让Go项目开发更加流畅高效。
|
7月前
|
存储 数据库
|
7月前
|
Rust 算法 开发者
【Rust 控制流入门指南】 Introduction to Control Flow in Rust
【Rust 控制流入门指南】 Introduction to Control Flow in Rust
57 0
|
数据采集 JSON 安全
简明指南:使用Kotlin和Fuel库构建JD.com分析
Kotlin是一门基于JVM的静态类型编程语言,以其简洁、高效、安全、跨平台等特点而著称。这门语言不仅适用于Android开发,还可用于服务器端和Web应用程序的开发。Fuel库作为一款轻量级的Kotlin HTTP客户端,提供了一套简洁易用的DSL(领域特定语言),使得发送HTTP请求和处理响应变得异常便捷。除此之外,Fuel还支持协程、异步操作、JSON处理以及文件上传等多种功能,以满足各种网络编程需求。
简明指南:使用Kotlin和Fuel库构建JD.com分析
|
编译器 测试技术 Go
Go 语言入门很简单:技巧和窍门 (Tips and Tricks)
本节将随着时间的推移而增长,但主要目标是分享一些有经验的开发人员在一段时间内发现的技巧。希望这些技巧能让新用户更快地提高工作效率。
|
编译器 Shell 测试技术
Go 语言入门很简单--技巧和窍门(Tips and Tricks)
Go 语言入门很简单--技巧和窍门(Tips and Tricks)
178 0
Go 语言入门很简单--技巧和窍门(Tips and Tricks)
|
存储 安全 程序员
Libra教程之:来了,你最爱的Move语言
Libra教程之:来了,你最爱的Move语言
|
缓存 API 数据库
Reading:一款不错的Material Desgin风格的Kotlin版本的开源APP
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/81946831 Reading https://github.com/Hankkin/Reading 简介 很久不见,重新拾起博客吧,今天分享一个开源APP-Reading,项目的初衷是因为自己平时翻文章,但是公众号又经常忘记看,自己索性搞一个APP吧,顺便练一下Kotlin。
1400 0