如何安装本地模块?

Chr*_*oms 8 perl6

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

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

use lib 'relative/path';
use My::Awesome::Module;
Run Code Online (Sandbox Code Playgroud)

但是,我真的希望能够安装My::Awesome::Module,所以我所要做的就是use它:

use My::Awesome::Module;
Run Code Online (Sandbox Code Playgroud)

实现这一目标的一种方法是设置PERL6LIB,但仍然不是"安装"类似的模块zef install ./My-Awesome-Module.


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

uge*_*exe 5

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

zef install ./My-Awesome-Module
Run Code Online (Sandbox Code Playgroud)

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

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);
Run Code Online (Sandbox Code Playgroud)

从 rakudo 2019.01 开始,假设没有卸载的依赖项,您可以在没有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);
Run Code Online (Sandbox Code Playgroud)