我的本地分布如下:
.
├── META6.json
└── lib
└── Foo.pm6
perl6 -I. -e 'use Foo;'
和perl6 -Ilib -e 'use Foo;'
都可以编译并运行,所以我应该使用哪个?为什么?
答案 0 :(得分:14)
问这个问题的另一种方式是“ -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
文件中列出的文件。
它允许将多个名称空间映射到单个文件(我不鼓励这样做)。
您可以在Perl6 .pm
文件旁边放置Perl .pm6
文件,作为一种双语言分发,因为您可以明确告诉Perl6使用哪些文件。 -Ilib
必须将所有.pm
和.pm6
文件都视为Perl6,这与该想法不兼容。