Pull to refresh

Публикация модуля на cpan

Reading time 3 min
Views 2.6K
Хочу поделиться опытом первой публикации своего модуля на cpan.org. Будем считать, что сам модуль уже написан. В моем случае это был модуль VK::App. Речь пойдет о том, как правильно собрать дистрибутив и опубликовать его на cpan.org.

Публикация модуля состоит трех этапов:
  • регистрация на pause.perl.org
  • сборка дистрибутива модуля
  • регистрация названия модуля и загрузка дистрибутива на сервер pause.perl.org.


Регистрация на pause.perl.org


Для загрузки модулей на cpan сделана специальная система pause.perl.org. Идем по ссылке, проходим не сложную процедуру регистрации. В итоге получаем pause_id и email вида pause_id@cpan.org. На email, который вы ввели при регистрации будут приходить сообщения от систем pause.perl.org и cpantesters.org. Но в документации к вашему модулю рекомендуется указывать в качестве email именно pause_id@cpan.org. Для того что бы настроить редирект с pause_id@cpan.org на ваш приватный email логинимся на pause.perl.org, идем в пункт меню «Edit Account Info», в поле «Secret email address» вводим email для редиректа, в самом низу страницы выбираем радио кнопку «my secret email address», давим Submit. Изменения вступят в силу через несколько часов. Кстати, если не настроить такой редирект, то не получиться привязать свой свой cpan аккаунт к замечательному сервису metacpan.org т.к. для привязки ему требуется ваш pause_id на который он высылает письмо для активации.

Сборка дистрибутива


Существует множество инструментов для автоматизации этого процесса. Вот в этой статье описано большинство из них.

Я остановил свой выбор на ExtUtils::ModuleMaker. Пишем маленький скрипт make_module.pl:
#!/usr/bin/perl

use ExtUtils::ModuleMaker;

$mod = ExtUtils::ModuleMaker->new(
  NAME => 'VK::App',
  ABSTRACT => 'Creation client applications for vk.com',
  VERSION => '0.01',
  LICENSE => 'perl', # You can choose one of the standard licenses by includin
  BUILD_SYSTEM => 'ExtUtils::MakeMaker',
  NEED_POD => '0', # Include POD section in *.pm files created. (Default is on
  NEED_NEW_METHOD => '0', # Include a simple new() method in the *.pm files cr
  INCLUDE_TODO => '0',
  INCLUDE_SCRIPTS_DIRECTORY => '1',
  AUTHOR => 'Misha Genaev',
  EMAIL => 'mag@cpan.org',
  CPANID => 'MAG',
  WEBSITE => 'http://genaev.com',
  FIRST_TEST_NUMBER => '1',
);

$mod->complete_build();

Помещаем его в какую нибудь временную директорию и запускаем. Он генерирует шаблон для нашего дистрибутива. Далее создаем директорию для самого дистрибутива. Если название модуля VK::App и его версия 0.01, то директория должна называться VK-App-0.01. После этого копируем в VK-App-0.01 шаблон и заменяем шаблонный App.pm реальным.
$ perl make_module.pl
$ mkdir VK-App-0.01
$ cp -r VK/App/* VK-App-0.01
$ cp real/App.pm VK-App-0.01/lib/VK

Зависимости вашего модуля от других указываются в Makefile.PL.
PREREQ_PM => {
'Test::Simple' => 0.44,
'LWP' => 5.834,
'LWP::Protocol::https' => '0',
'JSON' => 2.53,
},

У меня таких было всего два: LWP и JSON. Test::Simple туда добавляется автоматически при герерации шаблона дистрибутива. Версии модулей можно узнать командами:
$ perl -MLWP -e 'print "$LWP::VERSION\n"'
$ perl -MJSON -e 'print "$JSON::VERSION\n"'

Если подойдет любая версия, в Makefile.PL указывается 0.

Все дистрибутив готов. Нужно его запаковать и можно проверить работоспособность.
$ tar -czf VK-App-0.01.tar.gz VK-App-0.01
$ cd VK-App-0.01
$ perl Makefile.PL
$ make
$ make test

Регистрация названия модуля и загрузка дистрибутива


Важный этап в публикации модуля — регистрация его названия. Для этого в pause.perl.org идем в «Register Namespace» и вдумчиво заполняем все поля. Особое внимание надо уделить полям «Modules with similar functionality» и «Rationale». В первом надо перечислить названия похожих модулей. Во втором подробно рассказать, чем ваш модуль отличается от других и почему он должен называться именно так, как вы его назвали.

После этого идем в «Upload a file to CPAN» загружаем туда наш архив VK-App-0.01.tar.gz и ждем. В моем случае модуль появился на cpan.org примерно через сутки.
Tags:
Hubs:
+18
Comments 3
Comments Comments 3

Articles