如何安装本地模块?

How do I install local modules?

为了创建和维护 Perl 5 模块,我使用 Dist::Zilla。我最喜欢的功能之一是能够安装本地模块。

但是,对于 Perl 6,我不确定如何安装本地模块。当然,我可以使用 use lib:

use lib 'relative/path';
use My::Awesome::Module;

但是,我真的很想能够安装 My::Awesome::Module,这样我所要做的就是 use 它:

use My::Awesome::Module;

实现此目的的一种方法是设置 PERL6LIB,但这仍然不是 "installing" 模块,如 zef install ./My-Awesome-Module


更新:看来我需要制作一个合适的 META6.json 文件。

我正在写一个可能对你有帮助的 bin:http://github.com/FCO/6pm

要了解如何设置工具链实用程序可以理解的模块,请参阅 Preparing the module。通常这意味着添加一个描述分发的 META6.json 文件,包括准清单元素,例如您真正想要 include/provide 的文件。创建 META6.json 后,模块就可以安装了:

zef install ./My-Awesome-Module

其中(假设没有卸载的依赖项)本质上是:

my $install-to-repo = CompUnit::RepositoryRegistry.repository-for-name("site");
my $preinstall-dist = Distribution::Path.new("./My-Awesome-Module");
$install-to-repo.install($preinstall-dist);

从 rakudo 2019.01 开始,假设没有卸载的依赖项,您可以安装本地发行版 without a META6.json -- 但这纯粹是开发细节,不会在没有例如的复杂设置上工作可以推断的命名空间和文件结构。

my $read-from-repo   = CompUnit::Repository::FileSystem.new(prefix => "./My-Awesome-Module/lib");
my $install-to-repo  = CompUnit::RepositoryRegistry.repository-for-name("site");
my $some-module-name = "My::Awesome::Module"; # needed to get at the Distribution object in the next step
my $preinstall-dist  = $read-from-repo.candidates($some-module-name).head;
$install-to-repo.install($preinstall-dist);