如何安装本地模块?

时间:2017-04-05 13:06:42

标签: perl6

为了创建和维护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,但仍然不是“安装”zef install ./My-Awesome-Module之类的模块。

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

2 个答案:

答案 0 :(得分:3)

我正在写一个可以帮助你的垃圾箱:http://github.com/FCO/6pm

答案 1 :(得分:3)

要了解如何设置工具链实用程序可以理解的模块,请参见Preparing the module。通常,这意味着添加描述该分布的META6.json文件,其中包括准清单元素,例如您真正打算包含/提供的文件。创建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开始,假设没有卸载的依赖项,您可以安装本地发行版 不包含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);