-I和有什么不一样。和-Ilib在Perl6中?

时间:2019-04-13 02:29:16

标签: metadata perl6 software-distribution module-search-path

我的本​​地分布如下:

.
├── META6.json
└── lib
    └── Foo.pm6

perl6 -I. -e 'use Foo;'perl6 -Ilib -e 'use Foo;'都可以编译并运行,所以我应该使用哪个?为什么?

1 个答案:

答案 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

    < / li>

通常-Ilib会在开发时使用,尤其是在启动时,因为它比手动添加/删除META6.json文件中的条目更容易。如果您正在编写本地应用程序或不打算安装的内容,则通常可以。

但是!一旦为发布创建了-I.文件,就应该首选META6.json。手动维护可能需要更多工作,但有一些优点:

  • 它提供了一些基本的保证,即将安装;我看到的一个常见问题是模块通过了测试但无法实际安装,因为安装时的预编译只能访问META6.json文件中列出的文件。

  • 它允许将多个名称空间映射到单个文件(我不鼓励这样做)。

  • 您可以在Perl6 .pm文件旁边放置Perl .pm6文件,作为一种双语言分发,因为您可以明确告诉Perl6使用哪些文件。 -Ilib必须将所有.pm.pm6文件都视为Perl6,这与该想法不兼容。