HdC9YlO.png

创建 Elixir 项目

$ mix new simple_statistics
$ cd simple_statistics
$ mix test

Mix 生成了如下目录结构

|-- _build
|-- config/|-- config.exs
|-- lib/|-- simple_statistics.ex
|-- test/|-- simple_statistics_test.exs|-- test_helper.exs
|-- mix.exs
|-- mix.lock
|-- README.md
|-- .gitignore

开发代码

lib 下创建 simple_statistics 子目录, 和包名称一样, 用于存放其他模块.

|-- lib/|-- simple_statistics/|-- mean.ex|-- simple_statistics.ex
# lib/simple_statistics/mean.ex
defmodule SimpleStatistics.Mean dodef mean([]), do: nildef mean(list) doEnum.sum(list) / Kernel.length(list)end
end

编写文档

使用 @moduledoc@doc 编写函数和模块的文档. 应该在模块中编写每一个主要函数的文档.

# lib/simple_statistics/mean.ex
defmodule SimpleStatistics.Mean do@moduledoc false@doc ~S"""The mean is the sum of all values over the number of values."""def mean([]), do: nildef mean(list) doEnum.sum(list) / Kernel.length(list)end
end

添加文档测试

# lib/simple_statistics/mean.ex
defmodule SimpleStatistics.Mean do@moduledoc false@doc ~S"""The mean is the sum of all values over the number of values.## Examplesiex> SimpleStatistics.Mean.mean([])niliex> SimpleStatistics.Mean.mean([1,2,3,4,5])3.0iex> SimpleStatistics.Mean.mean([1.5,-2.1,3,4.5,5])2.38"""def mean([]), do: nildef mean(list) doEnum.sum(list) / Kernel.length(list)end
end

doctest 添加到测试集

# test/simple_statistics_test.ex
defmodule SimpleStatisticsTest douse ExUnit.Casedoctest SimpleStatistics.Mean
end

运行测试 mix test

$ mix test
.Finished in 0.07 seconds (0.07s on load, 0.00s on tests)
1 test, 0 failures

添加类型注解

类型注解可以使用 dialyzer 进行静态分析.

@spec mean(nonempty_list(number)) :: float()
def mean(list) doEnum.sum(list) / Kernel.length(list)
end

更新 mix.exs 文件, 添加依赖:

defp deps do[{:ex_doc, "~> 0.11", only: :dev},{:earmark, "~> 0.1", only: :dev},{:dialyxir, "~> 0.3", only: [:dev]}]
end

运行 dialyzer 静态分析工具:

$ mix dialyzer
Starting Dialyzer
dialyzer --no_check_plt --plt /Users/yosriady/.dialyxir_core_18_1.2.0.plt -Wunmatched_returns -Werror_handling -Wrace_conditions -Wunderspecs /Users/yosriady/simple_statistics/_build/dev/lib/simple_statistics/ebinProceeding with analysis... done in 0m1.68s
done (passed successfully)

生成文档

添加如下依赖到 mix.exs 文件

defp deps do[{:ex_doc, "~> 0.11", only: :dev},{:earmark, "~> 0.1", only: :dev}]
end

运行 mix deps.getmix deps.compile 获取和安装这些依赖, 最后用 mix docs 生成文档:

$ mix docs
$ cd docs
$ open index.html

生成ExDoc文档

发布库

现在这边把开发好的库发布到Hex, 以方便自己和别人使用.

注册Hex用户账号

$ mix hex.user register

更具提示注册即可. 稍后会受到激活链接, 点击激活, 就可以登陆了.

设置项目元数据

# mix.exs
def project do[app: :decision_tree,version: "0.0.1",elixir: "~> 1.2",build_embedded: Mix.env == :prod,start_permanent: Mix.env == :prod,description: description,package: package,deps: deps]
enddefp description do"""A few sentences (a paragraph) describing the project."""
enddefp package do[files: ["lib", "mix.exs", "README.md"],maintainers: ["Yos Riady"],licenses: ["Apache 2.0"],links: %{"GitHub" => "https://github.com/Leventhan/simple_statistics","Docs" => "http://hexdocs.pm/simple_statistics/"}]
end

元数据和依赖添加到 mix.exs 文件后, 我们就准备好发布这个包了, 使用 mix hex.publish 发布:

$ mix hex.publish
Publishing simple_statistics 0.0.1Dependencies:Files:lib/simple_statistics.exlib/simple_statistics/mean.exmix.exsREADME.mdApp: simple_statisticsName: simple_statisticsDescription: Statistics toolkit for Elixir.Version: 0.0.1Build tools: mixLicenses: Apache 2.0Maintainers: Yos RiadyLinks:Docs: http://hexdocs.pm/simple_statistics/GitHub: https://github.com/Leventhan/simple_statisticsElixir: ~> 1.2WARNING! Excluded dependencies (not part of the Hex package):ex_docearmarkdialyxir
Before publishing, please read Hex Code of Conduct: https://hex.pm/docs/codeofconduct
[#########################] 100%
Published at https://hex.pm/packages/simple_statistics/0.0.1
Don't forget to upload your documentation with `mix hex.docs`

现在我们的库就已经发布为 mix.exs 中指定的版本了.

在一个小时内, 一个发布版本可以通过 --revert 参数进行修改或退回(取消这个版本的发布).
如果你想回退(revert)超过一小时的发布, 需要联系管理员

发布文档

可以把文档发布到 Hex Docs, 文档可以用任务 mix docs 生成.

$ mix hex.docs
Docs successfully generated.
View them at "doc/index.html".
[#########################] 100%
Published docs for simple_statistics 0.0.1
Hosted at https://hexdocs.pm/simple_statistics/0.0.1

文档可以通过 https://hexdocs.pm/simple_statistics/0.0.1 查看, https://hexdocs.pm/simple_statistics 总是重定向到最新的发布版本.

版本化

可以通过修改 mix.exs 文件的 version 值, 并运行 mix hex.publish 发布一个新的版本.

注意, 使用 Git tags 标注版本变更!

$ git tag -a v0.0.1 -m "Version 0.0.1"
$ git push origin v0.0.1 

结语

现在已经成功开发和发布了一个版本! 开发和发布Elixir库是简单和直接的. 现在其他开发者就可以把你的库添加到他们自己项目的依赖了.

Elixir: 开发和发布Elixir库相关推荐

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

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

  2. elixir开发的项目_我对Elixir的介绍:学习另一种编程语言如何使您成为更好的开发人员...

    elixir开发的项目 by Nikolas O'Donnell 由Nikolas O'Donnell 我对Elixir的介绍:学习另一种编程语言如何使您成为更好的开发人员 (My intro to ...

  3. npm和angular_如何开发,使用和发布Angular库到NPM

    npm和angular by Omer Kalim Ansari 通过Omer Kalim Ansari 如何开发,使用和发布Angular库到NPM-但是有时不值得! (How to develop ...

  4. Flux发布Elixir Essential限制器,提供对全景声的支持

    FLUX Immersive是创建沉浸式音频制作软件工具的领导者,今天自豪地宣布发布Elixir Essential,用于沉浸式混音的True Peak限制器,支持Atmos.与此同时推出了一个新的套 ...

  5. elixir 教程_认识Elixir,Laravel编译资产的方式

    elixir 教程 Many thanks to Jad Joubran, Gabriel Zerbib, Anthony Chambers, and Scott Molinari for peer ...

  6. 树莓派外设开发基础(wiringPi库)

    参考:树莓派外设开发基础篇 作者:丶PURSUING 发布时间:2021-02-05 18:20:53 网址:https://blog.csdn.net/weixin_44742824/article ...

  7. 华为软件开发云发布管理测评报告

    华为软件开发云的发布管理是面向软件开发者提供软件组件仓库,生命周期,内部及第三方依赖等管理服务,支撑产品持续发布,提升发布质量及效率.目前发布管理支持提供了Maven私有仓.中央仓代理.内部组件依赖管 ...

  8. 主干开发 主干发布_通过基于主干的开发来改善发布过程

    主干开发 主干发布 作为软件开发人员,我们的主要目标是通过向客户发布丰富的内容来改善我们的业务. 发行和发展该内容将产生真正的积极业务影响. 我在一组开发人员中努力实现这一目标. 与许多技术行业一样, ...

  9. 2022 前端常用的开发工具、组件库等等~持续整理,待你分享~

    2022 前端常用的开发工具.组件库等等持续整理,待你分享 小伙伴们!我这里整理了一些对前端开发有帮助的工具.库.网站等.对于这些东西有些是我自己用过的,有些是听过的,但是也有些是没听过也没用过的.只 ...

最新文章

  1. MYSQL密码解密函数的使用
  2. 第一篇:web之前端之html
  3. c++ primer第四版上的内容质疑
  4. pkuseg:一个多领域中文分词工具包
  5. Linuxmint 美化之路
  6. 基于Web的浮动图片墙
  7. 小汤学编程之MySQL(二)——数据库操作、表结构操作、表数据操作、查询数据和数据类型
  8. Linux(2) vi和vim编辑器
  9. 测试工程师职业素养:懂得拒绝无效工作
  10. 5.Django|模型层--多表关系
  11. keras-迁移学习-resnet101-踩过的坑
  12. qt打开xls文件_Qt读取excel文件的两种方法
  13. Xmind基础教程-图标
  14. 电影《决战中途岛》中那些真实的历史人物,后来都怎样了?
  15. 常见比较好用的winpe系统有哪几款?
  16. 海康播放器sdk开发中的PlayM4_SetDecCallBack函数的调用
  17. 【渝粤教育】 广东开放大学21秋期末考试法律职业伦理10214k2
  18. php代码生成器软件_PHPCMS代码生成器
  19. python爬虫之手机模拟
  20. vray 5 渲染信息解读

热门文章

  1. 力求企业的内部公平性
  2. laravel Transformers中修改data键
  3. iOS走近商城APP(四 runloop应用 获取通讯录并处理)
  4. arcgis api for flex 开发入门(九)webservices 的使用
  5. mysql 快速生成百万条测试数据
  6. 慎用jQuery中的submit()方法
  7. [LeetCode]Maximal Rectangle
  8. 比特现金网络升级之争:1个CPU=1票
  9. 为什么说比特币的交易属性优于储值属性
  10. DPOS机制会比POW机制表现更好吗?