Elixir: 开发和发布Elixir库
创建 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.get
和 mix deps.compile
获取和安装这些依赖, 最后用 mix docs
生成文档:
$ mix docs
$ cd docs
$ open index.html
发布库
现在这边把开发好的库发布到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库相关推荐
- 使用 Elixir 开发嵌入式系统: 使用DS18B20传感器测量体温
文本, 我会使用一个Elixir实现的模块函数去读取连接到树莓派的DS18B20温度传感器的温度数值. 文本假设你熟悉 数字电路基础 Elixir编程基础 视频演示 https://v.qq.com/ ...
- elixir开发的项目_我对Elixir的介绍:学习另一种编程语言如何使您成为更好的开发人员...
elixir开发的项目 by Nikolas O'Donnell 由Nikolas O'Donnell 我对Elixir的介绍:学习另一种编程语言如何使您成为更好的开发人员 (My intro to ...
- npm和angular_如何开发,使用和发布Angular库到NPM
npm和angular by Omer Kalim Ansari 通过Omer Kalim Ansari 如何开发,使用和发布Angular库到NPM-但是有时不值得! (How to develop ...
- Flux发布Elixir Essential限制器,提供对全景声的支持
FLUX Immersive是创建沉浸式音频制作软件工具的领导者,今天自豪地宣布发布Elixir Essential,用于沉浸式混音的True Peak限制器,支持Atmos.与此同时推出了一个新的套 ...
- elixir 教程_认识Elixir,Laravel编译资产的方式
elixir 教程 Many thanks to Jad Joubran, Gabriel Zerbib, Anthony Chambers, and Scott Molinari for peer ...
- 树莓派外设开发基础(wiringPi库)
参考:树莓派外设开发基础篇 作者:丶PURSUING 发布时间:2021-02-05 18:20:53 网址:https://blog.csdn.net/weixin_44742824/article ...
- 华为软件开发云发布管理测评报告
华为软件开发云的发布管理是面向软件开发者提供软件组件仓库,生命周期,内部及第三方依赖等管理服务,支撑产品持续发布,提升发布质量及效率.目前发布管理支持提供了Maven私有仓.中央仓代理.内部组件依赖管 ...
- 主干开发 主干发布_通过基于主干的开发来改善发布过程
主干开发 主干发布 作为软件开发人员,我们的主要目标是通过向客户发布丰富的内容来改善我们的业务. 发行和发展该内容将产生真正的积极业务影响. 我在一组开发人员中努力实现这一目标. 与许多技术行业一样, ...
- 2022 前端常用的开发工具、组件库等等~持续整理,待你分享~
2022 前端常用的开发工具.组件库等等持续整理,待你分享 小伙伴们!我这里整理了一些对前端开发有帮助的工具.库.网站等.对于这些东西有些是我自己用过的,有些是听过的,但是也有些是没听过也没用过的.只 ...
最新文章
- MYSQL密码解密函数的使用
- 第一篇:web之前端之html
- c++ primer第四版上的内容质疑
- pkuseg:一个多领域中文分词工具包
- Linuxmint 美化之路
- 基于Web的浮动图片墙
- 小汤学编程之MySQL(二)——数据库操作、表结构操作、表数据操作、查询数据和数据类型
- Linux(2) vi和vim编辑器
- 测试工程师职业素养:懂得拒绝无效工作
- 5.Django|模型层--多表关系
- keras-迁移学习-resnet101-踩过的坑
- qt打开xls文件_Qt读取excel文件的两种方法
- Xmind基础教程-图标
- 电影《决战中途岛》中那些真实的历史人物,后来都怎样了?
- 常见比较好用的winpe系统有哪几款?
- 海康播放器sdk开发中的PlayM4_SetDecCallBack函数的调用
- 【渝粤教育】 广东开放大学21秋期末考试法律职业伦理10214k2
- php代码生成器软件_PHPCMS代码生成器
- python爬虫之手机模拟
- vray 5 渲染信息解读