Как создать дистрибутив 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.
- установить все Dist::Zilla и другие зависимости для разработки по отдельному пути, используя картон через cpanfile
- связать эти локальные библиотеки с основным проектом
- здесь вы делаете что-то в своем проекте, например, добавляете больше зависимостей
-
carton exec dzil build
(Dist::Zilla::Plugin::CPANFile автоматически создаст cpanfile с зависимостями проектов) - установите их как обычно с помощью
carton
- впредь
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";