Как ключ "file" структуры "обеспечивает" работу с "META.*" Для "CPAN::Meta::Spec"?
Я пытаюсь лучше понять, что я мог бы использовать CPAN::Meta::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
может все что кроме зависимостей?Как CPAN-клиенты обрабатывают такие случаи?
META.*
очевидно, это не сам пакет Perl, и я не понимаю, как он используется для его генерации. Так что же на самом деле устанавливается в систему? Есть ли какой-то дополнительный механизм генерации пакета как-то?Как обеспечивает
META.*
вместо*.pm
совместим с ключомversion
и следующее ограничение:
[...] Если пакет не имеет $VERSION, это поле должно быть пропущено.
Есть ли META.*
считать как пакет, содержащий $VERSION
в этом случае? Или ожидается, что каким-то образом пакет будет сгенерирован в конце, и это просто должно иметь $VERSION
и до тех пор, пока пакет не сгенерирован, версия META.*
можно просто использовать?
Спасибо за ваше разъяснение!
1 ответ
provides
метаданные - это список пакетов, предоставляемых дистрибутивом, главным образом для использования индексатором PAUSE, но также могут использоваться инструментами анализа. Если он присутствует, PAUSE не будет проверять ваши файлы на наличие пакетов и их версий, но будет доверять provides
, Для каждого пакета в дистрибутиве должен быть указан файл, в котором находится пакет, и версия пакета, если он есть. Поскольку это "переопределение", оно не обязательно должно соответствовать реальности, но если вы не делаете что-то очень странное, это должно произойти. Возможность установить файл в META.yml
или же META.json
просто запасной вариант, если у вас есть пакет, с которым нет связанного файла; это крайне редко, что вам нужно будет сделать это, и это не накладывает никаких дополнительных требований на META.json
или же META.yml
кроме того, что они должны существовать. Как всегда, в реализации эти метаданные всегда устанавливаются в META.json
а также META.yml
входит в дистрибутив.