-I之间有什么区别?和-Ilib在Perl6?

问题描述 投票:9回答:1

我有一个本地分布如下:

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

编译和运行perl6 -I. -e 'use Foo;'perl6 -Ilib -e 'use Foo;',我应该使用哪一个?为什么?

metadata perl6 software-distribution module-search-path
1个回答
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,这与此想法不兼容。
© www.soinside.com 2019 - 2024. All rights reserved.