Mik*_*Mik 5 perl github unicode-string cpanm
我正在尝试使用 cpanfile 和 cpanm 来安装大量模块。其中一个模块 Unicode::String 在 CPAN 上有一个错误,作者仅在 Github 上修复了该错误。(https://github.com/msouth/Unicode-String)
是否可以将 Github 存储库列为 cpanfile 中的要求,并从那里而不是从 CPAN 安装 cpanm?如果是这样,这样做的正确语法是什么?
我发现的最接近的是 2013 年的一条线索,宫川说它将在未来的版本中推出,然后未来的版本很脆弱并且被搁置:
https://github.com/perl-carton/carton/issues/132 (这里讨论 carton,但由于它们都使用 cpanfile,因此语法应该相同。)
小智 0
由于您无法在 中使用 git URL cpanfile
,因此您可以在安装过程中使用Distroprefs来修补软件包。我不知道这是否适用于 cpanm、cpm 或除 cpan 之外的任何包管理器。
你可以传递你自己的差异(git format-patch
这是你的朋友)并告诉修补特定版本(下一个版本应该是固定的,不需要尝试修补它)。
我用它来修补Module::Manifest::Skip,该模块在 docker 映像创建过程中在 GitHub 中修复了两个错误,以在 CI 上测试一些代码。
CPAN 将需要YAML包。
我将首选项添加到 cpandir ( ~/.cpan/prefs
)
---
match:
distribution: 'INGY/Module-Manifest-Skip-0.23.tar.gz'
depends:
configure_requires:
File::ShareDir: 1.114
patches:
- 'FOOBAR/Module-Manifest-Skip-0.23.patch'
Run Code Online (Sandbox Code Playgroud)
以及 CPAN 源中的补丁 ( ~/.cpan/sources/authors/id/F/FO/FOOBAR
)
diff --git a/lib/Module/Manifest/Skip.pm b/lib/Module/Manifest/Skip.pm
index 434f7ce..27c1ac7 100644
--- a/lib/Module/Manifest/Skip.pm
+++ b/lib/Module/Manifest/Skip.pm
@@ -28,9 +28,6 @@ sub import {
close MS;
exit;
}
- else {
- goto &Moo::import;
- }
}
sub add {
Run Code Online (Sandbox Code Playgroud)
这样,CPAN 将能够即时修补软件包。你可以在安装过程中看到它,它会告诉我们
# cpan Module::Manifest::Skip
Loading internal logger. Log::Log4perl recommended for better logging
Reading '/root/.cpan/Metadata'
Database was generated on Wed, 30 Mar 2022 04:55:39 GMT
Running install for module 'Module::Manifest::Skip'
______________________ D i s t r o P r e f s ______________________
Module-Manifest-Skip.yml[0]
Checksum for /root/.cpan/sources/authors/id/I/IN/INGY/Module-Manifest-Skip-0.23.tar.gz ok
Applying 1 patch:
/root/.cpan/sources/authors/id/F/FO/FOOBAR/Module-Manifest-Skip-0.23.patch
/usr/bin/patch -N -p1
patching file lib/Module/Manifest/Skip.pm
Configuring I/IN/INGY/Module-Manifest-Skip-0.23.tar.gz with Makefile.PL
Checking if your kit is complete...
Looks good
# ...
Run Code Online (Sandbox Code Playgroud)