我有一个本地分布,如下所示:
.
├── META6.json
└── lib
└── Foo.pm6
两者都perl6 -I. -e 'use Foo;'
编译perl6 -Ilib -e 'use Foo;'
和运行,那么我应该使用哪一个,为什么?
我有一个本地分布,如下所示:
.
├── META6.json
└── lib
└── Foo.pm6
两者都perl6 -I. -e 'use Foo;'
编译perl6 -Ilib -e 'use Foo;'
和运行,那么我应该使用哪一个,为什么?
问这个问题的另一种方法是“-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
必须将 all.pm
和.pm6
files 视为 Perl6,这与此想法不兼容。