Создание библиотеки Elixir для проверки орфографии
Вместо того, чтобы напрямую включать мой простой код проверки орфографии в свой проект, почему бы не превратить его в библиотеку, которую мне было бы легче использовать в других местах, а также публиковать публично.
Я знаю, что существуют некоторые другие библиотеки, но ни одна из них не является стандартом, и, поскольку я действительно делаю это в качестве эксперимента, простите меня за то, что я немного заново изобрел велосипед.
Я следую этому официальному руководству по созданию библиотеки.
Создание проекта
Начнем с простого создания новой библиотеки.
$ mix new spell_chex
Я предпочитаю эволюционный и итеративный стиль разработки, поэтому, прежде чем беспокоиться о сложности GenServer
в моей окончательной сборке проверки правописания, я создам проект с наивной реализацией (обсуждаемой ранее) и убедитесь, что я могу создать библиотеку, а затем используйте библиотеку в моем хост-приложении.
Давайте будем хорошими гражданами и добавим немного документации:
defmodule SpellChex do
@moduledoc """
Module used to invoke SpellChex.
"""
@moduledoc since: "1.0.0"
@sample_words ["hello", "world", "elixir", "phoenix", "spell", "check", "dog", "cat"]
@doc """
Determines if a given `word` is in the list of known words.
Returns `true` or `false`.
## Examples
iex> SpellChex.exists?("dog")
true
iex> SpellChex.exists?("asdfas")
false
"""
@doc since: "1.3.0"
def exists?(word) do
# GenServer.call(__MODULE__, {:check_exists, word})
word in @sample_words
end
end
Чтобы наши документы могли создаваться, нам нужно добавить зависимость ex_doc
к нашему mix.exs
.
defp deps do
[
{:ex_doc, "~> 0.31", only: :dev, runtime: false}
]
И давайте проверим эти документы. (Подробнее о локальном запуске документов здесь.)
mix deps.get
mix docs
cd doc
caddy file-server --browse --listen :5051
Это должно быть все для наивной реализации. Теперь давайте разберемся, как собрать его локально и использовать в нашем хост-проекте.
Используйте библиотеку локально
В конце концов мы захотим отправить наш локальный код на github и опубликовать его на Hex, но зачем беспокоиться о публикации каждый раз, когда вы хотите протестировать что-то локально?
Первое, что нужно сделать, это обновить хост-проект, чтобы он ссылался на вашу новую библиотеку с опцией path
:
defp deps do
[
...
{:spell_chex, path: "../spell_chex"},
Снова возьмите свои deps
(смешайте deps.get
), и теперь вы можете начать использовать библиотеку:
iex(1)> SpellChex.exists?("dog")
true
Настройте библиотеку
Поскольку библиотека использует GenServer
для создания словаря слов, нам необходимо добавить наш словарь при запуске хост-приложения.
Обновите дочерние элементы в lib/<host>/application.ex
:
def start(_type, _args) do
children = [
...
SpellChex.Dictionary,
...
]
Теперь вы сможете запустить приложение хост-микса и протестировать его:
iex -S mix
...
iex(1)> SpellChex.exists?("dog")
true
iex(2)> SpellChex.exists?("blahblah")
false
iex(3)> SpellChex.exists?("bonsai")
true
Публикация через Github
Вы можете просто отправить свою последнюю версию в основную, а затем ссылаться на свою библиотеку из mix.ex
хост-приложения, как показано ниже.
{:spell_chex, git: "https://github.com/byronsalty/spell_chex"},
Но вы можете по-прежнему использовать управление версиями. Если да, то вы бы отметили это так:
git tag -a "0.0.1"
git push origin 0.0.1
# or
git push origin --tags
Затем вы можете использовать версию из mix.exs
:
{:spell_chex, git: "https://github.com/byronsalty/spell_chex", tag: "0.0.1"},
Публикация в Hex
Но, возможно, вы хотите сделать свою библиотеку по-настоящему глобальной...
Следуя этому руководству по публикации в Hex:
Основные моменты:
- Настройте свою учетную запись Hex.
- Добавьте все необходимые метаданные.
- Убедитесь, что ваши документы построены.
- Публикуем!
mix hex.publish
Теперь вы можете использовать стандартный стиль зависимостей mix.exs
:
{:spell_chex, "~> 0.0.1"},
Приятного кодирования!
Если эта статья оказалась для вас полезной, поддержите ее лайком, комментарием или подпиской.
Прочтите больше статей Байрона о лидерстве и искусственном интеллекте.
Статьи о разработке здесь.
Следите за новостями на Medium, Dev.to, Twitter или LinkedIn.