Хочу поделиться опытом первой публикации своего модуля на 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::VERSIONn"'
$ perl -MJSON -e 'print "$JSON::VERSIONn"'
Если подойдет любая версия, в 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 примерно через сутки.
Автор: genaev