Еще один способ задать этот вопрос: «В чем разница между -I $ dir-with-meta6-file и -I $ dir-without-meta6-file?».В этом ответе -I.
будет технически означать -I $dir-with-meta6-file
, а -Ilib
будет означать -I $dir-without-meta6-file
.Также обратите внимание, что use lib '.'
и use lib 'lib'
Разница между -I.
и -Ilib
может быть кратко суммирована:
-I.
будет выглядетьна META6.json
для каких файлов / пространств имен и их версии / api / auth
-Ilib
предоставляет все существующие файлы и отображает их в предсказуемое пространство имен (Foo/Bar.pm6
-> Foo::Bar
) и будет соответствовать любой версии / api / auth
Обычно -Ilib
используется при разработке, особенно при запуске, потому что это проще, чем вручную добавлять / удалять записи вфайл META6.json
.Если вы пишете локальное приложение или что-то, что не предназначено для установки, это в основном нормально.
Однако!-I.
предпочтительнее, если для распространения создан файл META6.json
.Это может быть немного больше работы, чтобы поддерживать вручную, но у этого есть несколько преимуществ:
Это обеспечивает некоторую базовую гарантию, что это будет установлено;Обычная проблема, которую я вижу, состоит в том, что модули проходят свои тесты, но не могут быть фактически установлены, поскольку прекомпиляция при установке имеет доступ только к файлам, перечисленным в файле META6.json
.
Это позволяет отображать несколько пространств именв один файл (я не поощряю это).
Вы можете иметь файлы Perl .pm
рядом с файлами Perl6 .pm6
как тип двухязыкового распространения, так как выможет явно указать Perl6, какие файлы использовать.-Ilib
должен рассматривать все файлы .pm
и .pm6
как Perl6, и это не совместимо с этой идеей.