如何进行结构的关键“文件”“规定”有工作“META。*”的“CPAN ::元::规格”?

问题描述 投票:1回答:1

我想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.pmFoo/Bar3.pm可能在分配存在,他们没有明确定义,但含蓄地使用META.*文件。

  1. 如何这样的META.*的样子,里面是什么东西?只有像nameversion,这是一个本地Perl包可能会提供,以及东西呢?或额外的东西像licensekeyword,除了依赖也许一切?
  2. 如何CPAN的客户端处理这种情况? META.*显然不是Perl的包本身,我不明白如何使用它来生成它。那么,什么被实际安装在最终的系统?有一些额外的机制在某种程度上产生了包?
  3. 如何提供META.*代替*.pm用钥匙version及以下限制兼容:

[...]如果包装没有一个$ VERSION,必须省略这个字段。

是否META.*算作在这种情况下,包含$VERSION一个包?抑或是期待,不知怎的,包被最终生成并简单地必须有$VERSION以及只要不产生包,可以简单地使用META.*的版本?

感谢您的澄清!

perl dependencies dependency-management cpan metacpan
1个回答
1
投票

provides元数据是由分布主要由暂停索引使用所提供的包的列表,还可以通过分析工具来使用。如果存在,PAUSE不会检查你的文件包和他们的版本,但会信任provides。对于在分发每个包必须列出软件包所在的文件,以及包的版本(如果有)。由于这是一个“覆盖”,它不需要与现实相符,但除非你正在做一些它应该很奇怪。设置为META.ymlMETA.json文件的能力是一个简单的回退,如果你有没有相关的文件包;这是非常罕见的,你需要做到这一点,它放置在META.jsonMETA.yml除非他们应该不存在额外的要求。与往常一样,在实现这个元数据始终在META.json设置和包括在发行META.yml

© www.soinside.com 2019 - 2024. All rights reserved.