uge*_*exe 9 software-distribution metadata perl6 module-search-path
我的本地分布如下:
.
??? META6.json
??? lib
??? Foo.pm6
Run Code Online (Sandbox Code Playgroud)
双方perl6 -I. -e 'use Foo;'并perl6 -Ilib -e 'use Foo;'编译和运行,所以哪一个我应该使用,为什么?
uge*_*exe 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在Perl6文件旁边放置Perl 文件.pm6作为一种双语言分发。-Ilib必须将所有.pm和.pm6文件视为Perl6,这与该想法不兼容。