Как ключ "file" структуры "обеспечивает" работу с "META. *" Для "CPAN :: Meta :: Spec"? - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь лучше понять для чего Я мог бы использовать 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.*.

  1. Как выглядит такой META.*, что он содержит?Только такие вещи, как name и version, что же может обеспечить нативный пакет Perl?Или дополнительные вещи, такие как license и keyword, может быть, все, кроме зависимостей?

  2. Как CPAN-клиенты обрабатывают такие случаи?META.* очевидно, это не сам пакет Perl, и я не понимаю, как он используется для его генерации.Так что же на самом деле устанавливается в систему?Есть ли какой-то дополнительный механизм, генерирующий пакет каким-то образом?

  3. Как обеспечить совместимость META.* вместо *.pm с ключом version и следующее ограничение:

[...] Если пакет не имеет $ VERSION, это поле должно быть пропущено.

Учитывает ли META.* пакет, содержащий $VERSION в этом случае?Или ожидается, что каким-то образом пакет будет сгенерирован в конце, и он просто должен иметь $VERSION, а пока пакет не сгенерирован, можно просто использовать версию META.*?

Спасибо за ваше разъяснение!

1 Ответ

0 голосов
/ 03 февраля 2019

Метаданные provides представляют собой список пакетов, предоставляемых дистрибутивом, в основном для использования индексатором PAUSE, но также могут использоваться инструментами анализа.Если он присутствует, PAUSE не будет проверять ваши файлы на наличие пакетов и их версий, но будет доверять provides.Для каждого пакета в дистрибутиве должен быть указан файл, в котором находится пакет, и версия пакета, если он есть.Поскольку это «переопределение», оно не обязательно должно соответствовать реальности, но если вы не делаете что-то очень странное, это должно произойти.Возможность установить для файла META.yml или META.json - просто запасной вариант, если у вас есть пакет, у которого нет связанного файла;это крайне редко, что вам нужно будет сделать это, и это не накладывает никаких дополнительных требований на META.json или META.yml, за исключением того, что они должны существовать.Как всегда, в реализации эти метаданные всегда устанавливаются в META.json и META.yml включаются в дистрибутив.

...