概述

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 mix 简介的更多相关文章

  1. elixir mix开发入门

    备注: 简单使用mix 进行项目的生成,同时添加docker 构建支持 1. 生成项目 mix new mydemoproject 输出信息如下: * creating README.md * cre ...

  2. laravel5.4+vue+element简单搭建(gulp+laravel Elixir)(转)

    如今laravel来到5.4版本,更方便引入vue了,具体步骤如下: 下图为我动到的文件 1.下载laravel5.4 2.命令行(laravel5.4目录下):composer install 3. ...

  3. SpaceVim 语言模块 elixir

    原文连接: https://spacevim.org/cn/layers/lang/elixir/ 模块简介 功能特性 启用模块 快捷键 语言专属快捷键 交互式编程 运行当前脚本 模块简介 这一模块为 ...

  4. laravel+vue结合使用

        SegmentFault 首页 问答 专栏 讲堂 圈子 发现 搜索 立即登录免费注册 在 SegmentFault,学习技能.解决问题 每个月,我们帮助 1000 万的开发者解决各种各样的技术 ...

  5. Cannot find module 'laravel-elixir'问题解决方法

    在用gulp 安装elixir的时候报了这样的错误: Laravel elixir npm error Cannot find module 'laravel-elixir/ingredients/c ...

  6. Elixir 简介

    概述 Elixir 是一种基于 Erlang 虚拟机的函数式,面向并行的通用语言, 它是一门通用语言,所以不仅可以用在擅长的高可用,高并发场景下,也可以用在 web 开发等场景下. Erlang 诞生 ...

  7. elixir 使用mix umbrella 模块化项目

    备注: 项目比较大, 模块比较多,一般使用mix 的方式是大家进行文件夹的划分,但是使用mix 的umbrella 可能会更方便 1. 安装 默认安装elixir 的时候已经包含了这个功能 2. 基本 ...

  8. elixir 高可用系列(二) GenServer

    概述 如果我们需要管理多个进程,那么,就需要一个专门的 server 来集中监控和控制这些进程的状态,启停等. OTP 平台中的 GenServer 就是对这个 server 通用部分的抽象. 利用 ...

  9. Browsersync 简介 and 使用

    简介 省时的浏览器同步测试工具,Browsersync能让浏览器实时.快速响应您的文件更改(html.js.css.sass.less等)并自动刷新页面. 曾经我们每改一次的代码,都需要手动去刷新一次 ...

随机推荐

  1. 基础篇:1.JavaScript运行在html中,引用有几种方式?—— 6.js中常用的输出方式?

    书接上文,上文提到若干条JavaScript的基础性知识,大部分都是一些概念性的东西,本着认真严谨的态度,我们要认真对待,有些条目的问题是某个知识点的周边延伸,为节约篇幅,就一起整理了,如有描述不对的 ...

  2. TensorFlow(3)CNN中的函数

    tf.nn.conv2d()函数 参数介绍: tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=Non ...

  3. [转]bitcoin: 通过 rpc 请求节点数据

    本文转自:https://laravel-china.org/index.php/articles/8919/bitcoin-requests-node-data-through-rpc 文章来自本人 ...

  4. [android] 分析setting源代码获取SD卡大小

    保存文件到sd卡需要判断sd卡的大小,通过查看android系统的自带应用的源代码,得到方法,sdk下面的source是sdk的源代码,包含的是android.Jar下面的所有class的源代码.在a ...

  5. Laravel篇二之本地版本库关联github

    以往的工作中都是使用svn作为版本控制,对git分布式的有些陌生,本篇主要记录的本地存储myWeb-laravel的git版本库与github建立关联. 1.首先进入本地myWeb-laravel,执 ...

  6. wp rest api 授权方法步骤(使用JWT Authentication插件)

    环境:wordpress 4.7 以上,WP自带的 rest api v2 目标:使用javascript与wp rest api交互,其中编辑.新增.删除等需要Oauth认证授权 方法: 步骤一:  ...

  7. nginx部署与安装

    1.在学习ngnix的时候,免不了需要进行安装,安装其实很简单,一个shell脚本就可以搞定可以参考如下 使用root用户执行nginx-install.sh脚本即可,脚本如下: #!/bin/bas ...

  8. Could not open input file: artisan 【Laravel初体验】

    1,情景描述:在命令行窗口写入php artisan make:model Models\MenuModel用于创建模型时,出现此错误(Could not open input file: artis ...

  9. 带你了解源码中的 ThreadLocal

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 这次想来讲讲 ThreadLocal 这个很神奇的东西,最开始接触到这个是看了主席的<开发艺术探索>,后来是在研究 Vi ...

  10. 年会抽奖 抽奖系统 抽奖软件 C# Winform

    年会抽奖软件: Q.Q 358189777 C#.  数据库Access: 1.系统启动,自动全屏展示. 2.背景随心切换. 3.快捷键方便自如: F1:弹出设置界面 F2:查询人员名单.中奖名单 F ...