Как создать дистрибутив Perl с помощью DIst::Zilla и использовать Carton для зависимостей?

У меня есть дистрибутив Perl, который я создал с Dist::Zilla, и поэтому мне не нужно загрязнять мою установленную библиотеку Perl зависимостями, я использовал Carton для управления ими.

Вещи отлично работают в разработке, но когда я бегу dzil test или же dzil release и тесты запускаются, затем зависимости не обнаруживаются и тесты не выполняются, поскольку модули не могут быть загружены.

я пытался carton exec -- dzil test а также PERL5LIB=local/lib/perl5 dzil test но я думаю, что это означает, что мне нужно поместить все мои deps:: Zilla в cpanfile, что кажется неправильным (у меня есть Dist::Zilla и deps, которые мне нужны, в пути к моей библиотеке perl).

Есть ли способ лучше?

2 ответа

Решение

Я решил это с:

export PERL5LIB=$PERL5LIB:/absolute/path/to/project/local/lib/perl5; dzil release

Вот что нам нужно сделать, если мы хотим разделить зависимости между девелопером и самим пакетом и установить все через картон (то есть не держать их в системе). И в то же время, когда Dist::Zilla::Plugin::CPANFile перезаписывает пакет cpanfile.

  1. установить все Dist::Zilla и другие зависимости для разработки по отдельному пути, используя картон через cpanfile
  2. связать эти локальные библиотеки с основным проектом
  3. здесь вы делаете что-то в своем проекте, например, добавляете больше зависимостей
  4. carton exec dzil build(Dist::Zilla::Plugin::CPANFile автоматически создаст cpanfile с зависимостями проектов)
  5. установите их как обычно с помощью carton
  6. впредь carton exec dzil testзаработает!

Позвольте мне проиллюстрировать это, как будто все зависимости разработки находятся в каталоге dev:

      #!perl

chdir 'dev'; 
system 'carton'; # (1)
chdir ".."; # (2)
if (!-l "local") { symlink("dev/local", "local") or die $@; } # (2)
if (!-l "cpanfile.snapshot") { symlink("dev/cpanfile.snapshot", "cpanfile.snapshot") or die $@; } # (2)
system 'carton'; # (5)

print "done\n";
Другие вопросы по тегам