获取已安装的模块以识别配置文件的更改

时间:2018-04-23 21:32:06

标签: config packages perl6

我有一个使用config.json的软件包用于它使用的某些设置。我在本地保留包,而不是从CPAN安装它。我的问题是当我对config.json进行更改时,程序包无法识别自配置文件缓存到其他地方后的更改,强制我运行zef install --force-install或删除precomp。如何确保程序包始终识别配置文件的更新?

1 个答案:

答案 0 :(得分:4)

使用zef安装软件包时,它会将它们保存在文件系统中,但它们的名称会转换为sha1,类似于

/home/jmerelo/.rakudobrew/moar-2018.03/install/share/perl6/site/sources/81436475BD18D66BFD96BBCEE07CCCDC0F368879

zef会跟踪它们,您可以使用zef locate找到它们,例如:

zef locate lib/Zef/CLI.pm6

您可以从程序中运行该程序,例如:

sub MAIN( Str $file ) {
    my $location = qqx/zef locate $file/;
    my $sha1 = ($location ~~ /\s+ \=\> \s+ (.+)/);
    say "$file → $sha1[0]";
}

将返回几乎相同,除了它将为您提供在命令行提供的文件的第一个位置:

lib/Zef/CLI.pm6 → /home/jmerelo/.rakudobrew/moar-2018.03/install/share/perl6/site/sources/81436475BD18D66BFD96BBCEE07CCCDC0F368879

您可能需要在config.json目录(这是首选位置)中安装resources文件,然后使用类似的东西。

那就是说,实际上安装一个你正在测试的模块并不是最好的策略。如果您还在测试内容,那么只要将其保存在您正在使用的目录中并使用perl6 -I<that directory>或者use lib <that directory>可能更好一些,情况可能会更好选项。您可以在发布或保留它时删除它,因为它只会在搜索路径中添加另一个目录,并且不会损害已发布的模块。