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

Kai*_*epi 5 config packages perl6

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

jjm*_*elo 4

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

\n\n
/home/jmerelo/.rakudobrew/moar-2018.03/install/share/perl6/site/sources/81436475BD18D66BFD96BBCEE07CCCDC0F368879\n
Run Code Online (Sandbox Code Playgroud)\n\n

zef但是,您可以跟踪它们,并且可以使用 找到它们zef locate,例如:

\n\n
zef locate lib/Zef/CLI.pm6\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以从程序中运行它,例如这样:

\n\n
sub MAIN( Str $file ) {\n    my $location = qqx/zef locate $file/;\n    my $sha1 = ($location ~~ /\\s+ \\=\\> \\s+ (.+)/);\n    say "$file \xe2\x86\x92 $sha1[0]";\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
lib/Zef/CLI.pm6 \xe2\x86\x92 /home/jmerelo/.rakudobrew/moar-2018.03/install/share/perl6/site/sources/81436475BD18D66BFD96BBCEE07CCCDC0F368879\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

也就是说,实际安装您正在测试的模块可能并不是最好的策略。如果您仍在测试某些东西,最好将其保留在您正在使用和使用的目录中,perl6 -I<that directory>否则use lib <that directory>可能是更好的选择。您可以在发布时删除它,也可以保留它,因为这只会将另一个目录添加到搜索路径中,并且不会损害已发布的模块。

\n

  • 我在测试时不安装,只是在更改“config.json”时安装。正如您所说,我可以通过将“config.json”移动到“resources/”并创建指向缓存文件位置的硬链接来使其工作。如果我上传到 CPAN,这样的链接不会有用,这对我来说并不重要,因为我不打算这样做 (2认同)
  • 更改已安装模块位置内的文件可能并不明智。安装的发行版应该是不可变的,系统依赖于此。如果您需要其他配置,您应该在已安装的模块数据库之外提供该配置。另请参阅:https://github.com/ugexe/zef/issues/241#issuecomment-383823558 (2认同)