我想better understand什么I could use CPAN::Meta::Spec
并在spec的关键file
跨越下面的句子来了:
[...],以含有或产生的包的文件。它可以给出为META.yml或META.json权利要求的封装用于索引而无需*的.pm。
这一句对我来说,一个能够直接指定使用文件路径,而不是META.*
的配置中的一些*.pm
。因此,使用的措辞it
,明确关联到以前提到的路径。很像在下面的例子:
provides => {
'Foo::Bar' => {
file => 'lib/Foo/Bar.pm',
version => '0.27_02'
},
'Foo::Bar2' => {
file => 'lib/Foo/Bar2.yml', <-- META.yml?
},
'Foo::Bar3' => {
file => 'lib/Foo/Bar3.json', <-- META.json?
version => '0.3'
}
所以,虽然Foo/Bar2.pm
和Foo/Bar3.pm
可能在分配存在,他们没有明确定义,但含蓄地使用META.*
文件。
META.*
的样子,里面是什么东西?只有像name
和version
,这是一个本地Perl包可能会提供,以及东西呢?或额外的东西像license
和keyword
,除了依赖也许一切?META.*
显然不是Perl的包本身,我不明白如何使用它来生成它。那么,什么被实际安装在最终的系统?有一些额外的机制在某种程度上产生了包?META.*
代替*.pm
用钥匙version
及以下限制兼容:[...]如果包装没有一个$ VERSION,必须省略这个字段。
是否META.*
算作在这种情况下,包含$VERSION
一个包?抑或是期待,不知怎的,包被最终生成并简单地必须有$VERSION
以及只要不产生包,可以简单地使用META.*
的版本?
感谢您的澄清!
该provides
元数据是由分布主要由暂停索引使用所提供的包的列表,还可以通过分析工具来使用。如果存在,PAUSE不会检查你的文件包和他们的版本,但会信任provides
。对于在分发每个包必须列出软件包所在的文件,以及包的版本(如果有)。由于这是一个“覆盖”,它不需要与现实相符,但除非你正在做一些它应该很奇怪。设置为META.yml
或META.json
文件的能力是一个简单的回退,如果你有没有相关的文件包;这是非常罕见的,你需要做到这一点,它放置在META.json
或META.yml
除非他们应该不存在额外的要求。与往常一样,在实现这个元数据始终在META.json
设置和包括在发行META.yml
。