Slightly less basic Perl6 module management
This is meant to answer some of the reoccurring questions I've seen in #perl6 about module management. Solutions use the Perl6 package manager called Zef
Q) Install a module to a custom/non-default location?
A) Use the install
command with the --install-to
parameter
zef --install-to=inst#/my/custom/location install My::Module
Q) I installed a module to a custom location, but rakudo doesn't see it?
A) Set the PERL6LIB
env variable or -I
flag accordingly
PERL6LIB="inst#/my/custom/location" perl6 -e "use Text::Table::Simple; say 'ok'"
ok
perl6 -Iinst#/my/custom/location -e "use Text::Table::Simple; say 'ok'"
ok
Q) Uninstall a module installed to a custom/non-default location?
A) Use the uninstall
command with the --from
parameter
zef --from=inst#/my/custom/location uninstall My::Module
Q) Install a module from a uri instead of a name?
A) JFDI - Many extraction formats are supported by default, and others can easily be added
zef install https://github.com/ugexe/zef.git
zef install https://github.com/ugexe/zef/archive/master.zip
zef install https://github.com/ugexe/zef/archive/master.tar.gz
Q) Install dependencies when the top level module fails to install?
A) Use the --serial
flag in addition to the install
command
# Without --serial any dependencies of My::Module would only be installed if
# My::Module passes its build/test phase (even if the dependencies pass their tests)
zef --serial install My::Module
Q) Use TAP6
instead of prove
?
A1) Temporarily disable the services that are configured to be used first via a CLI flag (--/$service-short-name>)
zef --/prove --/default-tester install My::Module
zef --/prove --/default-tester test My::Module
A2) Open resources/config.json
and reorder the entries under Test
so Zef::Service::TAP
is first (or the only)
"Test" : [
{
"short-name" : "tap-harness",
"module" : "Zef::Service::TAP",
}
]
Q) Find out what this SHA1 string from an error message is?
A) Use the locate
command with the --sha1
flag
zef --sha1 locate A9948E7371E0EB9AFDF1EEEB07B52A1B75537C31
Q) How do I search/install/etc specific versions or verion ranges?
A) The same way you'd use it in Perl6 code
zef search "CSV::Parser:ver<2.*>"
===> Found 0 results
zef search "CSV::Parser:ver<0.*>"
===> Found 2 results
...